我一直在绞尽脑汁而无法理解这一点。当从用户输入的数字数组中计算出最小值和最大值时,最小值在第4或第5次交互时变为不是最小值的数字。我一直试图慢慢地看看发生了什么,但也许我一直在看这个太久了。任何帮助都会非常值得赞赏。
public class average2
{
public static void main (String [] args)
{
double[] scores = new double [25];
double max= 0 ;
double min = 0;
int count = 0;
double sum = 0;
double score= 0;
double average = 0;
int i;
while ((count < 25)&&((score=IO.readDouble("Enter Scores, -1 to Quit")) >0))
{ {scores[count++]=score;}
min= scores[0];
max = scores[0];
for (i=0;i<scores.length; i++)
if (score > max)
{ max = score;
min = min;}
if (score < min)
{ min = score;}
sum = sum + score;
average = sum /scores.length;
System.out.println(score); //this line is for testing purposes only
System.out.println("Max is " + max);
System.out.println("Min is " + min);
System.out.println("The sum of the scores is " + sum);
System.out.println("The average of the scores is " + average);
count = count + 1;
}// end while loop
}// end main
}//end class
答案 0 :(得分:1)
请务必记住,如果您不使用{}
,则只会在for
中运行一行代码。因此,良好的编码风格始终使用{} !
for (i=0;i<scores.length; i++){
if (score > max) { max = score; min = min;}
if (score < min) { min = score;}
}
答案 1 :(得分:0)
您的for
循环缺少括号,因此您的第二个if
未包含在直接块中。
for (i=0; i < scores.length; i++) {
if (score > max) {
max = score;
// min = min;
}
if (score < min) {
min = score;
}
}
可以包含使用else if
之类
for (i=0; i < scores.length; i++)
if (score > max)
max = score;
else if (score < min)
min = score;
我建议您更喜欢使用大括号,因为它可以完全避免您发布的版本所带来的错误。
答案 2 :(得分:0)
除非我读错了,否则你的while循环
while ((count < 25)&&((score=IO.readDouble("Enter Scores, -1 to Quit")) >0))
{ {scores[count++]=score;}
仅包含更新分数。因此,当您将最小值和最大值与得分进行比较时,它将仅反映最后输入的数字。
即如果我输入5,4,1,3,2,-1 您的“得分”值将为2并且不会更改,因为每次给出新输入时它都不会更新。因此,当您将得分[0]与得分进行比较时,它将比较值5和2,并将MAX设置为5,因为得分[0] = 5且得分= 2.MIN将为0,因为得分[0]&lt;分数。
更新值的最佳方法是将for循环括在括号中,如上所述,并迭代分数数组,而不是仅仅比较“得分”。
for (i=0;i< count; i++) {
if (score[i] > max) {
max = score[i];
min = min; }
if (score[i] < min) {
min = score[i];}
}