结束一个没有哨兵的循环

时间:2015-10-23 19:44:02

标签: java loops while-loop

我有一个可以存储多达500个值的数组。当我输入500个值时,一切都按原样运行。但是,我想输入尽可能多的值,500或更少,并仍然得到一个输出。例如,获得任意数量的平均值,500或更少。

继续我的while循环我现在不会终止,直到达到500个数字:

public class StatsPackage{

static InputStreamReader isr = new InputStreamReader (System.in);
static BufferedReader br = new BufferedReader (isr);
String [] inputs = new String [500];
static int inputs2[] = new int [500];
double [] scores = new double [500];
int count;
static int lowest, temp, i = 0;
static double sum, mean, median, sumOfSquares, variance, stdDev;
static boolean even = (inputs2.length & 1) == 0;
static boolean odd  = (inputs2.length % 1) != 0;


static double calcMean (int inputs2[],int count) throws IOException{

    while(i < inputs2.length){
        String inputs = br.readLine();   
        String [] Values = inputs.split ("\\s+");
        inputs2 [i] = Integer.parseInt(Values[0]);                  
        i++; }//end of while loop
    for (i = 0; i < inputs2.length; i++){
        sum = sum + inputs2[i];
    }   
    mean = (sum/count);
    return mean;            
}

输入是我的数字输入字符串,值是一个字符串数组,我将字符串从“值”解析为我的整数数组,'inputs2'

有关如何提前终止循环的任何想法或帮助?

示例输入 -

49 66 73 56 3 39 33 77 54 29

示例输出 -

Mean: 47.90
Median: 51.50
Variance: 458.29
Standard Deviation: 21.41

2 个答案:

答案 0 :(得分:3)

您需要最终用户在完成输入号码时告诉您。这可以通过多种方式完成。最终用户可以

  • 输入商定的号码(例如-1),
  • 输入空字符串或
  • 在UNIX上按 Ctrl + D 或在Windows上按 Ctrl + Z 关闭输入流

在所有情况下,您都需要存储已存储在inputs2数组中的元素数量,并使用该索引运行检查数组活动部分的循环。由于两个原因,这是次优的:

  • 您可以分配比实际需要更多的内存,
  • 您的用户可能希望输入的数据超出您配置的数量。

要解决这两个问题,请使用ArrayList<Integer>而不是数组。

以下是用户输入空行时退出的示例实现:

List<Integer> inputs2 = new ArrayList<Integer>();
while(true) {
    String inputs = br.readLine();   
    String [] values = inputs.split ("\\s+");
    if (values.length() == 0)
        break; // Users entered an empty line, so we exit
    for (int i = 0 ; i != values.length() ; i++) {
        inputs2.add(Integer.parseInt(Values[i]));
    }
} //end of while loop

答案 1 :(得分:0)

使用特殊值作为循环终止符,例如“-1”,然后在条件下使用它来结束循环。您还可以在while块的正文中检查此条件,并使用break语句。