最小/最大值无变化地变化

时间:2015-03-13 04:35:55

标签: java loops for-loop

我一直在绞尽脑汁而无法理解这一点。当从用户输入的数字数组中计算出最小值和最大值时,最小值在第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            

3 个答案:

答案 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];}
  }