Java 从扫描仪输入中找到最小值总是导致零
Java finding the minimum value from Scanner input always resulting in zero
这是我的第一个 Java 程序。它应该允许用户输入 0 到 100 之间的整数等级。如果用户输入负值,数据输入将停止并显示统计信息。我无法合并静态方法、数学或数组。
我在查找最低成绩 minGrade 时遇到问题。无论在程序 运行ning 时输入什么值,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 程序的代码形式,或其他任何东西都将不胜感激。
我遇到的最后一个问题是平均成绩的第十位总是零。怎样才能得到第十名不为零和实际平均金额?
minGrade
的问题是您将其初始化为 0。这已经是最小值,因此没有其他值会小于此值。 (实际上,您可以通过将负成绩设置为 0 来进一步确保这一点。)将其初始化为最大值 (100)。
看起来你的 "double prompt" 问题是 common one 与 nextLine
和 nextInt
。该解决方案似乎仅使用 nextLine
,然后解析 Integer
对象的 return 值。 (并在 NumberFormatException
上打印出 "invalid input" 文本。
最后,您的 avgGrade
始终是 xx.0
,因为您将两个整数相除,这总是返回一个整数。您需要将 one 转换为 double 以获得 double 返回:
avgGrade = ((double)sumGrades/numberOfGrades);
minGrade
永远不会设置为 0 以外的任何值,因为 0 永远不会大于输入的成绩,因此此检查失败 if(minGrade > grade)
。尝试将 minGrade
初始化为 Integer.MAX_VALUE
.
这是我的第一个 Java 程序。它应该允许用户输入 0 到 100 之间的整数等级。如果用户输入负值,数据输入将停止并显示统计信息。我无法合并静态方法、数学或数组。
我在查找最低成绩 minGrade 时遇到问题。无论在程序 运行ning 时输入什么值,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 程序的代码形式,或其他任何东西都将不胜感激。
我遇到的最后一个问题是平均成绩的第十位总是零。怎样才能得到第十名不为零和实际平均金额?
minGrade
的问题是您将其初始化为 0。这已经是最小值,因此没有其他值会小于此值。 (实际上,您可以通过将负成绩设置为 0 来进一步确保这一点。)将其初始化为最大值 (100)。
看起来你的 "double prompt" 问题是 common one 与 nextLine
和 nextInt
。该解决方案似乎仅使用 nextLine
,然后解析 Integer
对象的 return 值。 (并在 NumberFormatException
上打印出 "invalid input" 文本。
最后,您的 avgGrade
始终是 xx.0
,因为您将两个整数相除,这总是返回一个整数。您需要将 one 转换为 double 以获得 double 返回:
avgGrade = ((double)sumGrades/numberOfGrades);
minGrade
永远不会设置为 0 以外的任何值,因为 0 永远不会大于输入的成绩,因此此检查失败 if(minGrade > grade)
。尝试将 minGrade
初始化为 Integer.MAX_VALUE
.