0

我有一个关于如何跳出循环以免包含值的问题。我应该输入几个整数来表示考试成绩,然后在输入“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

4 回答 4

1

您没有考虑到您已将 min 初始化为零,因此:

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

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

因此,请在以下条件下考虑到这一点:

if(min == 0 || min < grade)
{
     min=grade;
}
于 2013-11-05T00:30:43.387 回答
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).

于 2013-11-05T00:20:21.187 回答
0

看起来您在处理0. 您的最小值为 0 的原因是因为您将其初始化为 0,因此if (grade<min) { min=grade; }对于任何正数当然都不会发生grade

你有几个选择:

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

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

这里的重点是,您看到最低 0 的原因不是因为您正在处理最终的 0,而是因为您将最低限度初始化为 0,并且没有成绩低于此。

于 2013-11-05T00:22:00.137 回答
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
于 2013-11-05T00:32:55.367 回答