【问题标题】:Java finding the minimum value from Scanner input always resulting in zeroJava从扫描器输入中找到最小值总是导致零
【发布时间】:2016-05-07 23:01:36
【问题描述】:

这是我的第一个 Java 程序。它应该允许用户输入 0 到 100 之间的整数等级。如果用户输入负值,数据输入将停止并显示统计信息。我不能合并静态方法、数学或数组。

我在查找最低成绩 minGrade 时遇到问题。无论在程序运行时输入什么值,minGrade 总是导致为零。我一直在修补这个问题,但无济于事。

我遇到的另一个问题是,当我运行程序时,我输入了一堆 int,然后输入了一些字母来测试错误检查,程序解析用户两次,而不是一次。

"Please enter a numeric grade between 0 and 100, inclusive, and press Enter:"

各自的代码是:

import java.util.Scanner;


public class Grades {

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

        System.out.println("Please enter the Course Code and and press Enter:");
        String courseCode = keyboard.nextLine();
        System.out.println("You entered: " + courseCode + "\n");

        int grade = 0;

        int numberOfGrades = 0;
        int maxGrade = 0;
        int minGrade =0;
        double avgGrade = 0;
        int sumGrades = 0;

        int sentinel = 0;



        do

        {


                **System.out.println("Please enter a numeric grade between 0 and 100, inclusive, and press Enter:");**
                while(!keyboard.hasNextInt())
                {

                    System.out.println("Please enter a numeric grade between 0 and 100, inclusive, and press Enter:");
                    keyboard.nextLine();

                }

                grade = keyboard.nextInt();
                if((grade <=100) && (grade >= 0))
                {
                    numberOfGrades++;
                    sumGrades += grade;
                    sentinel = 0;

                    if(maxGrade < grade)
                        maxGrade = grade;

                    **if(minGrade > grade)
                        minGrade= grade;**
                }
                else if(grade > 100)
                {

                    System.out.println("The entered number was greater than 100. Please enter a number between 0 and 100 inclusive, "
                            + "or input a negative number to exit Grade entry");
                    sentinel = 0;
                }
                else if(grade <0)
                {
                    grade = 0;//maybe?
                    sentinel = -1;

                }

        }
        while((grade >100) || (sentinel == 0));


        avgGrade = (sumGrades/numberOfGrades);



        System.out.println("You entered: " + "\ngrade: " + grade + "\n" + "sentinel: "+ sentinel +
                "\nSum of Grades: " + sumGrades +"\nNumber of Grades: "+ numberOfGrades +"\nAverage Grades: " + avgGrade
                + "\nMaxium Grade: "+ maxGrade+"\nMinimum Grade: "+minGrade);
    }

}

对此的任何输入、我的第一个 java 程序的代码形式或其他任何内容都将不胜感激。

我遇到的最后一个问题是平均成绩总是有第十位为零。怎样才能让第十位不为零和实际平均金额?

【问题讨论】:

    标签: java if-statement input minimum


    【解决方案1】:

    minGrade 的问题在于您将其初始化为 0。这已经是最小值,因此没有其他值会小于此值。 (实际上,您可以通过将负分数设置为 0 来确保这一点。)将其初始化为最大值 (100)。

    看起来您的“双重提示”问题是 common onenextLinenextInt。该解决方案似乎只使用nextLine,然后解析Integer 对象的返回值。 (并在NumberFormatException 上打印出您的“无效输入”文本。

    最后,您的avgGrade 始终是xx.0,因为您将两个整数相除,这总是返回一个整数。您需要将一个转换为双精度才能获得双精度:

    avgGrade = ((double)sumGrades/numberOfGrades);
    

    【讨论】:

    • 是的,我的意思是它会询问用户两次。 ' .nextLine()' 和 'nextInt() ,当数字不是 'Int' 时,我将如何确保它不会询问两次。我自己并不完全理解这两个语句,Java 文档也没有太大帮助。谢谢,双重转换有效。我试过avgGrade = 1.0d * (x/y),好像没用
    • @SajSeesSound 您需要将其中一项转换为双精度,就像我在代码示例中显示的那样。问题是 (x/y) 将截断为 int,因此您需要执行 ((double)x/y)。我正在处理双重提示问题。
    • 最后,在第一个 'if' 语句之前,'grade' 的值是否不会改变为 0 以外的值?如果是这样,为什么计算的值迭代为零?
    • @SajSeesSound 我找到了解决您的双重提示问题的方法。我不确定你在问什么grade。它应该从nextInt 获取一个值,即您输入的值。
    • 这导致提示需要两个用户输入,而不是原来的操作,显示两个提示但需要一个输入。
    【解决方案2】:

    minGrade 永远不会设置为 0 以外的任何值,因为 0 永远不会大于输入的成绩,因此此检查失败 if(minGrade &gt; grade)。尝试将minGrade 初始化为Integer.MAX_VALUE

    【讨论】:

      猜你喜欢
      • 2022-11-14
      • 1970-01-01
      • 2017-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-04
      相关资源
      最近更新 更多