Это моя первая Java-программа. Предполагается, что пользователь должен вводить значения int от 0 до 100. Если пользователь вводит отрицательное значение, запись данных прекращается, и статистика отображается. Я не могу включать статические методы, математику или массивы.Java-поиск минимального значения из ввода сканера всегда приводит к нулю
У меня возникла проблема с поиском минимального класса 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, или что-нибудь еще было бы весьма признателен.
Последний выпуск, который у меня есть, заключается в том, что средний класс всегда имеет десятое место нуля. Как я могу получить десятое место, чтобы не было нуля и фактической средней суммы?
Да, я имею в виду, что он спрашивает пользователя дважды. '.nextLine()' и 'nextInt(), как бы я пошел, чтобы убедиться, что он не спрашивает дважды, когда число не является «Int». Я сам не совсем понимаю эти два утверждения, и java-документация мало помогла. Спасибо, двойное преобразование работало. Я попробовал avgGrade = 1.0d * (x/y), он, похоже, не работал – SeesSound
@SajSeesSound вам нужно сделать один из элементов двойным, как показано в моем примере кода. Проблема в том, что (x/y) будет усекаться до int, поэтому вам нужно сделать ((double) x/y). Я работаю над двойной проблемой. – River
И, наконец, не изменилось ли значение «grade» перед первым оператором «if» на что-то отличное от нуля? Если да, то почему значение для вычислений повторяется как ноль? – SeesSound