【发布时间】:2016-06-23 12:37:51
【问题描述】:
我的任务是取数字,每行一个,然后计算平均值、中位数、方差和标准差。当输入 null 或输入 500 个数字时,while 循环停止。我计算了中位数和标准差,但由于某种原因,我的方差和均值输出是错误的。另外,如果您可以帮助我设置 while 循环的参数,以便在输入 500 个数字时也结束。
我的意见:
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 3.0, 3.0, 3.0, 3.0, 3.0, 4.0 , 4.0, 4.0, 4.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 6.0, 6.0, 6.0, 6.0, 7.0, 7.0, 7.0, 7.0, 7.0, 8.0, 8.0, 8.0, 8.0 , 8.0, 8.0, 8.0, 9.0, 9.0, 9.0, 9.0, 9.0, 9.0, 9.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 11.0, 11.0, 11.0, 11.0, 11.0, 11.0, 12.2. ,12.0,12.0,12.0,13.0,12.0,13.0,13.0,13.0,13.0,13.0,13.0,13.0,13.0,13.0,14.0,14.0,14.0,14.0,14.0,14.0,15.0,15.0,15.0,15.0,15.0 ,15.0,15.0,16.0,16.0,16.0,17.0,17.0,17.0,17.0,18.0,18.0,18.0,18.0,18.0,18.0,18.0,19.0,19.0,19.0,19.0,19.0,19.0,20.0,20.0,19.0,20.0,20.0,120.0,20.0,20.0,20.0,20.0,20.0,20.0,20.0,20.0,20.0 ,20.0,21.0,21.0,21.0,21.0,21.0,21.0,21.0,21.0,22.0,22.0,22.0,22.0,22.0,22.0,22.0,22.0,22.0,22.0,23.0,23.0,23.0,23.0,23.0,23.0,23.0,23.0,24.0,23.0,23.0,24.0,24.0,23.0,24.0,24.0,24.0,24.0 ,24.0,25.0,25.0,25.0,25.0,25.0,25.0,26.0,26.0,26.0,26.0,26.0,26.0,26.0,26.0,27.0,27.0,27.0,27.0,27.0,27.0,28.0,28.0,28.0,29.0,28.0,28.0,29.0,29.0,28.0,29.0,29.0,29.0,29.0,29.0,29.0,29.0 , 29.0, 30.0, 30.0,30.0,30.0,30.0,30.0,31.0,31.0,31.0,31.0,33.0,33.0,33.0,33.0,33.0,34.0,34.0,34.0,34.0,34.0,34.0,34.0,34.0,34.0,34.0,35.0,35.0,35.0,35.0,35.0,35.0,35.0, 35.0,36.0,36.0,36.0,37.0,37.0,37.0,38.0,38.0,38.0,38.0,39.0,39.0,39.0,39.0,39.0,39.0,39.0,39.0,39.0,39.0,40.0,40.0,49.0,40.0,40.0,40.0,41.0,41.0,41.0,41.0, 41.0,42.0,42.0,42.0,42.0,43.0,43.0,43.0,43.0,44.0,44.0,44.0,45.0,45.0,45.0,45.0,45.0,46.0,46.0,46.0,46.0,46.0,46.0,47.0,47.0, 47.0,47.0,47.0,49.0,49.0,49.0,49.0,49.0,50.0,50.0,51.0,51.0,51.0,51.0,51.0,52.0,52.0,52.0,52.0,52.0,53.0,52.0,52.0,53.0,53.0,53.0,53.0,54.0, 54.0,54.0,55.0,55.0,55.0,56.0,56.0,56.0,56.0,56.0,56.0,57.0,57.0,58.0,58.0,58.0,58.0,58.0,59.0,58.0,58.0,59.0,59.0,59.0,59.0,59.0,59.0,59.0,59.0,59.0,60.0,60.0, 60.0,60.0,60.0,60.0,60.0,61.0,61.0,61.0,61.0,61.0,61.0,61.0,61.0,62.0,61.0,62.0,62.0,63.0,63.0,62.0,63.0,63.0,63.0,64.0,64.0,63.0,64.0,64.0,64.0,64.0,64.0,64.0,64.0,64.0, 64.0, 64.0, 64.0, 65.0, 65.0, 65.0, 65.0, 65.0, 65.0, 66.0, 66.0, 66.0, 66.0, 66.0, 66.0, 67.0, 67.0 ,67.0,68.0,68.0,68.0,68.0,68.0,68.0,68.0,68.0,68.0,69.0,69.0,69.0,69.0,69.0,69.0,69.0,69.0,69.0,70.0,70.0,79.0,70.0,70.0,70.0,70.0,70.0,70.0,70.0,70.0,70.0,70.0,71.0,71.0 ,71.0,71.0,71.0,71.0,71.0,72.0,72.0,72.0,72.0,72.0,72.0,72.0,72.0,72.0,73.0,73.0,73.0,73.0,73.0,73.0,73.0,74.0,74.0,75.0,74.0,74.0,75.0,75.0,75.0,75.0,75.0,75.0,75.0,76.0 ,76.0,76.0,76.0,76.0,77.0,77.0,77.0,77.0,77.0,77.0,77.0,78.0,78.0,78.0,79.0,79.0,79.0,79.0,79.0,79.0,79.0,79.0,79.0,79.0,79.0,79.0,79.0,79.0,79.0,79.0,79.0,79.0,80.0,80,79.0,80.0,80.0 ,80.0,80.0,81.0,81.0,81.0,82.0,82.0,82.0,82.0,82.0,82.0,83.0,83.0,83.0,83.0,83.0,84.0,83.0,84.0,84.0,84.0,84.0,84.0,85.0,84.0,84.0,85.0,85.0,85.0,85.0,85.0,85.0,85.0,85.0 ,85.0,85.0,86.0,86.0,87.0,87.0,87.0,87.0,87.0,87.0,88.0,88.0,88.0,88.0,88.0,89.0,89.0,88.0,89.0,89.0,89.0,89.0,89.0,89.0,89.0,90.0,90.0,90.0,91.0,91.0,91.0 ,91.0,92.0,92.0,92.0,93.0,93.0,93.0,93.0,94.0,94.0,94.0,94.0,94.0,95.0,95.0,94.0,95.0,95.0,95.0,96.0,96.0,96.0,96.0,96.0,96.0,96.0,96.0,97.0,97.0,97.0,97.0,97.0,97.0,98.0 , 98.0, 98.0, 98.0, 99.0, 99.0, 99.0, 100.0, 100.0
空
我的输出:
平均值:47.21
中位数:47.00
方差:857.34 标准差:29.28
预期输出:
平均值:47.27
方差:856.71
标准差:29.27
BufferedReader stdin =
new BufferedReader (new InputStreamReader (System.in));
NumberFormat nf = new DecimalFormat ("0.00");
nf.setMinimumFractionDigits (2);//Sets Min digits
nf.setMaximumFractionDigits (2);//Sets Max digits
String inputValue;
double sum = 0;
double counter = 0;
double median = 0;
double variance = 0;
double varianceCounter = 0;
List<String> input = new ArrayList<String>();
List<Double> numbers = new ArrayList<Double>();
while((inputValue = stdin.readLine()) != null && !inputValue.equals("")){
input.add(inputValue);
numbers.add (Double.parseDouble(inputValue));
}
for(int i = 0; i < input.size(); i++){
sum += (numbers.get(i));
counter++;
}
Collections.sort(numbers);
for(int i = 0; i < numbers.size(); i++){
if (numbers.size() % 2 == 0){
median = (numbers.get(numbers.size()/2-1) + numbers.get(numbers.size()/2))/2;
}
else {
median = (numbers.get((numbers.size())/2));
}
}
for(int i = 0; i < input.size(); i++){
variance += numbers.get(i) * numbers.get(i);
varianceCounter++;
}
System.out.println ("Mean: " + (nf.format(sum/counter)));
System.out.println ("Median: " + (nf.format(median)));
System.out.println ("Variance: " + (nf.format((variance/varianceCounter)-(sum*sum)/(varianceCounter*varianceCounter))));
System.out.println ("Standard Deviation: " + (nf.format(Math.sqrt((variance/varianceCounter)-(sum*sum)/(varianceCounter*varianceCounter)))));
}
}
【问题讨论】:
标签: java arrays for-loop arraylist while-loop