将未指定的数字范围存储到数组中

时间:2015-11-03 11:33:38

标签: java arrays

我正在尝试创建一个接收带有未指定长度的整数数组的程序。换句话说,长度取决于用户输入的整数数,但在存储任何整数之前,用户没有机会输入数组将包含的整数数。可以存储的最大整数数为100.如果输入负数,则表示数组结束,并且不应存储此负值。程序还应该计算存储的整数的平均值。

只要指定了数组的长度,所有这一切都非常简单。当输入负数时,我无法弄清楚如何停止读取整数,而且我也无法弄清楚如何不存储负数。

目前,代码如下所示:

    import java.util.Scanner;

    public class AnalyzeScores {

    public static void main(String[] args) {

        double sum = 0, average = 0;

        Scanner input = new Scanner(System.in);

        int scores[] = new int[100];

        System.out.println("Enter the scores: ");

        for (int i = 0; i < scores.length; i++) {

            scores[i] = input.nextInt(); 

            if (input.nextInt() < 0) {
                i--; // Remove the last input if negative
                break; // Exit the loop
            }

            sum += scores[i];

            average = sum / (i + 1);

        }

        System.out.println("Sum is " + sum);

        System.out.println("Average is: " + average);

    }
 }

break语句用于在输入负数时退出循环,但总和和平均值完全错误。例如,输入的数字1 2 3 4 5 -1,给出总和= 4,平均值= 2。

我希望这个问题不被视为愚蠢,我将不胜感激任何帮助!

3 个答案:

答案 0 :(得分:4)

在for循环中,您调用了两次input.nextInt();,但仅将第一个int存储到scores[i]。因此,第一个整数存储在scores[]中,但第二个整数被跳过。例如,如果输入是

  

1 2 3 4 5 -1

然后,

  • scores[0]通过致电1获取input.nextInt();
  • input.nextInt()语句中if的下一次调用消耗2
  • sum变为0 + 1 = 1
  • 循环迭代,scores[1]得到3(而不是2你所期望的。)
  • 并且类似4已在if内消耗。
  • sum变为1 + 3 = 4
  • 在下一轮循环中,scores[2]获得5
  • {li} input.nextInt()if语句中使用-1,这次if阻止找到true路径并循环breaks
  • 因此sum仍为4

更改以下内容:

if (input.nextInt() < 0) {
    i--; // Remove the last input if negative
    break; // Exit the loop
}

为:

if (scores[i] < 0) {
    break; // Exit the loop
}

答案 1 :(得分:1)

  

我正在尝试创建一个接收整数数组的程序   一个未指明的长度。换句话说,长度取决于方式   用户输入的许多整数,但用户没有得到   之前输入数组将包含多少个整数的机会   存储任何整数。

在这种情况下更好地使用struct Stream_Bufer { int size_; int capacity_max; int p_read; int p_write; char data_[320000]; } stream_buffer_[30]; #define COUNTOF(a) (sizeof(a) / sizeof(a)[0]) void do_init(void) { int ii; for(ii = 0; ii< COUNTOF(stream_buffer_); ii++){ stream_buffer_[ii].capacity_max = sizeof stream_buffer_[ii].data_; } } ,如果数组长度未预先定义

  

可以存储的最大整数数是100

继续检查尺寸,中断负数或元素超过100

ArrayList

<强>输出

public static void main(String[] args) throws ParseException {
        double sum = 0, average = 0;
        Scanner input = new Scanner(System.in);
        List<Integer> scores = new ArrayList<Integer>();
        System.out.println("Enter the scores: ");
        int i = 0;
        int number = 0;
        while (number >= 0 && scores.size()<=100) {
            number = input.nextInt();
            if (number >= 0) {
                scores.add(number);
                sum += number;
                average = sum / (scores.size());
            }
        }
        System.out.println("Sum is " + sum);
        System.out.println("Average is: " + average);
    }

答案 2 :(得分:0)

我不知道我是否理解你的问题。如果你想引入无限数量的整数;在这种情况下使用List类型。它可以为您提供动态输入的效率(而不是array类型)。

接下来,如果你想控制引入的负数或正数;利用if条件。例如:

if(number < 0){

    System.out.println("Introduce other number.");

}else{

*/your code for introducing a number goes here*/

}