我有一个问题,关于如何跳出循环以免包含值。我应该输入一些整数来表示测试的等级,然后在输入值“ 0”时退出循环。但是,我不希望在平均值和最小值的计算中包含0。这有点含糊,所以这是我的代码。

import java.util.*;
import java.lang.*;

public class Grades
{
   public static void main (String[] args)
   {
      Scanner myScan= new Scanner(System.in);

      String input="Input numerical grade:";
      System.out.println(input);



      int sum=0;
      int count= 0;
      int max= 0;
      int min= 0;
      double avg=0;

      boolean notNull= true;


      while(notNull== true)//While grades are greater than 0 ask the question again

         {
         int grade= myScan.nextInt();
         if(grade==0)break;

              if(grade>max)
              {
               max=grade;
              }

              if(grade<min)
              {

               min=grade;
              }

              System.out.println(input);
               sum +=grade;
               count++;
               avg= (sum)/(count);
            }


            System.out.println("Maximum:"+max);
            System.out.println("Minimum:"+min);
            System.out.println("Average:"+avg);



          }




      }


这是我输入一些随机考试成绩和0时的回报。因此,我希望我的最小值不为47,而不是0。

 ----jGRASP exec: java Grades

Input numerical grade:
89
Input numerical grade:
47
Input numerical grade:
78
Input numerical grade:
0
Maximum:89
Minimum:0
Average:71.0

 ----jGRASP: operation complete.

最佳答案

您的程序正在打印的0不是用户输入的0。这是将0初始化为的min。 (当前,您的average正在正确计算。)

if(grade<min)
{
     min=grade;
}


min的原始值为0。因此,除非您的分数为负,否则grade<min永远不会评估为true

代替int min = 0;,您应该这样做:

int min = Integer.MAX_VALUE;


另外,正如我所评论的那样,因为您永远不会触摸用作boolean条件检查的while loop,并且只希望在用户输入0时退出循环,所以您只需删除整个变量,然后使用while(true)

10-06 07:04