打破循环,以便不包含值

时间:2013-11-05 00:12:38

标签: 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.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.

4 个答案:

答案 0 :(得分:1)

你没有考虑到你用零初始化min所以:

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

永远不会改变min,因为它已经是最小的非负整数 - 零。

因此,请考虑以下条件:

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

答案 1 :(得分:0)

您的程序正在打印的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)

答案 2 :(得分:0)

在处理0之前,您似乎已经离开了循环。您的最小值为0的原因是因为您将其初始化为0,因此任何正if (grade<min) { min=grade; }都不会发生grade

您有几个选择:

  • 您可以直接为输入的第一年级设置min = max = grade
  • 您可以将min初始化为大数,任何合理等级都会低于,例如Integer.MAX_VALUE

您有一些实现第一个选项的可能性。您可以存储一些初始化为true的first标志,然后设置为false。您可以保持计数输入的数量,并在计数为0时初始化最小值/最大值(或者取决于您的操作方式为1)。您可以将min / max初始化为某个等级永远不会出现的特殊标志值,例如: -1,并在它们等于该标志值时直接将它们设置为grade

这里的要点是你看到0的最小值并不是因为你正在处理最后的0,这是因为你将你的最小值初始化为0,并且没有等级低于此。

答案 3 :(得分:0)

你可能想要这样的东西:

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