Java中的ArrayList和输入

Oct*_*lop 6 java arrays arraylist

我习惯了python,所以这对我来说有点混乱.我试图逐行接收输入,直到用户输入一定数量.数字将存储在一个数组中,以便为它们应用一些统计数学.目前,我有一个主类,统计类和一个"阅读"类.

两个问题:

  1. 我似乎无法让输入循环得以解决,这样做的最佳做法是什么.

  2. 读取方法的对象类型是什么?double []或ArrayList?

    1. 如何将method-type声明为arraylist?

    2. 如何防止阵列中存储的值超过1000?

让我展示一下到目前为止:

public static java.util.ArrayList readRange(double end_signal){
    //read in the range and stop at end_signal

    ArrayList input = new ArrayList();
    Scanner kbd = new Scanner( System.in );
    int count = 0;
    do{
        input.add(kbd.nextDouble());
        System.out.println(input); //debugging
        ++count;
    } while(input(--count) != end_signal);
    return input;
}
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激,原谅我的新手......

Jas*_*hen 5

您在循环条件中需要的是:

while ( input.get( input.size()-1 ) != end_signal );
Run Code Online (Sandbox Code Playgroud)

你正在做的是递减计数器变量.

你也应该声明ArrayList如下:

ArrayList<Double> list = new ArrayList<Double>();
Run Code Online (Sandbox Code Playgroud)

这使得列表类型特定,并允许条件给定.否则会有额外的施法.


Osc*_*Ryz 2

答案:

>1. 我似乎无法让输入循环发挥作用,这样做的最佳实践是什么。

我宁愿有一个简单的 while 循环而不是 do{}while... 并将条件放在 while... 在我的示例中,它是:

当读取的数量不是结束信号并且计数低于限制时:do。

>2. 读取方法的对象类型是什么?double[] 还是 ArrayList?

ArrayList,但是我强烈建议您使用 List ( java.util.List ) 接口。针对接口而不是针对实现进行编程是一种良好的面向对象实践。

>2.1如何将方法类型声明为数组列表?

请参阅下面的代码。

>2.2。如何防止数组中存储的值超过 1000 个?

通过在 while 条件中添加此限制。

import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;

public class InputTest{
    
    private int INPUT_LIMIT = 10000;

    public static void main( String [] args ) {
        InputTest test = new InputTest();
        System.out.println("Start typing numbers...");
        List list = test.readRange( 2.0 );
        System.out.println("The input was " +  list );
    }

    /**
     * Read from the standar input until endSignal number is typed.
     * Also limits the amount of entered numbers to 10000;
     * @return a list with the numbers.
     */
    public List readRange( double endSignal ) {
        List<Double> input = new ArrayList<Double>();
        Scanner kdb = new Scanner( System.in );
        int count = 0;
        double number = 0;
        while( ( number = kdb.nextDouble() ) != endSignal && count < INPUT_LIMIT ){
            System.out.println( number );
            input.add( number );
        }
        return input;
    }
}
Run Code Online (Sandbox Code Playgroud)

最后备注:

最好有“实例方法”而不是类方法。这样,如果需要,“readRange”可以由子类处理,而无需更改签名,因此在示例中,我删除了“static”关键字,并创建了“InputTest”类的实例

在java代码风格中,变量名称应该采用驼峰式大小写,如“endSignal”而不是“end_signal”