2015-11-03 42 views
0

我正在尝试制作一个程序,该程序接收未指定长度的整数数组。换句话说,长度取决于用户输入的整数数量,但用户在存储整数之前没有机会输入数组将包含的整数。可存储的最大整数数量为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.

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

+1

在'换loop'使用:“如果(得分[I] <0){打破;}' – TheLostMind

回答

4

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

1 2 3 4 5 -1

然后,

  • scores[0]通过调用input.nextInt();得到1
  • input.nextInt()if声明中的下一个呼叫消耗2
  • sum变成0 + 1 = 1
  • 循环迭代和scores[1]得到3(而不是2你所期待的)。
  • 4类似地if内消耗。
  • sum变成1 + 3 = 4
  • 在循环的下一次迭代中,scores[2]得到5
  • 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 
} 
0

我不知道如果我理解你的问题的权利。如果你想引入无限数量的整数,这种情况下使用List类型。如您所要求的那样,动态录入效率更高(而不是array类型)。

接下来,如果要控制引入的负数或正数,使用if条件。例如:

if(number < 0){ 

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

}else{ 

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

} 
1

我试图让接收整数数组与 未指定lenght的程序。换句话说,长度取决于用户输入的多个整数,但用户不能获得输入数组将包含多少个整数的机会,在 之前存储任何整数。

更好地利用ArrayList在这种情况下,如果数组长度没有预先定义

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

保持检查大小,为负数或超过100的元素打破

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); 
    } 

输出

Enter the scores: 
1 
2 
3 
4 
5 
-1 
Sum is 15.0 
Average is: 3.0