Java 打破循环,从而不包含值

Java 打破循环,从而不包含值,java,while-loop,Java,While Loop,我有一个问题,关于如何打破一个循环,以便不包括一个值。我应该输入几个整数来表示考试成绩,然后在输入值“0”时中断循环。但是,我不希望在计算平均值和最小值时包含0。这有点模糊,所以这是我的代码 import java.util.*; import java.lang.*; public class Grades { public static void main (String[] args) { Scanner myScan= new Scanner(System.

我有一个问题,关于如何打破一个循环,以便不包括一个值。我应该输入几个整数来表示考试成绩,然后在输入值“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
不是用户输入的
0
。这是您初始化
min
0
。(目前,您的
平均值正在正确计算中。)


另外,正如我所评论的,因为您从未接触过用作
while循环的
布尔值
,并且您只想在用户输入
0
时退出循环,所以您可以删除整个变量,然后使用
while(true)

在处理
0
之前,您似乎已经脱离了循环。最小值为0的原因是您将其初始化为0,因此当然
if(grade您没有考虑您已将最小值初始化为0,所以:

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

你可能想要这样的东西:

import java.util.Scanner;

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 grade = myScan.nextInt();

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

        while (grade != 0) {

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

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

            count++;
            sum += grade;
            avg = (sum) / (count);

            System.out.println(input);
            grade = myScan.nextInt();

        }

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

    }

}

修正你的标签,这样我们就可以知道循环的内部和外部是什么,而不是使用布尔值,你可以只做
,而(true)
…你所做的应该是有效的,尽管不可能用糟糕的缩进来确定排序。你的问题是将“min”初始化为零——总是初始化“min”这是一个很大的数字。无论谁否决了每个答案,都应该留下一条评论来解释原因。我否决了布莱恩的答案,并给出了解释。我不知道其他否决答案的人是否都是正确的。杰森,我不知道是谁否决了我们的答案,但我会否决你的答案。我也否决了你的答案!现在我们是反对票的朋友!小心因为投票很重要!
int min = Integer.MAX_VALUE;
if(grade<min)
{
     min=grade;
}
if(min == 0 || min < grade)
{
     min=grade;
}
import java.util.Scanner;

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 grade = myScan.nextInt();

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

        while (grade != 0) {

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

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

            count++;
            sum += grade;
            avg = (sum) / (count);

            System.out.println(input);
            grade = myScan.nextInt();

        }

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

    }

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