Эта программа предназначена для поиска максимальных, минимальных и средних оценок. Пользователь вводит int inputGrade, и программа отображает букву. Это должно делать столько, сколько нужно студентов. У меня проблемы с написанием метода, в котором он находит максимум и минимум. (да, я поговорил со своим учителем, если кому-то интересно ...) Я вставил следующие методы (они не работают). Так же, как ВООБЩЕ, кто-нибудь знает, как найти максимум и минимум набора введенных чисел? (без использования массивов, списков или какого-либо необычного импорта, кроме сканера) ** обратите внимание, что я много обновлял это ...
import java.util.Scanner;
public class GetLetterGrade
{
static int inputGrade; // input grade
public static void main(String [] args)
{
Scanner reader = new Scanner(System.in);
int classAverage;
int classMin; // class's minimum grade
int classMax; // class's maximum grade
while (inputGrade != -1) // while user is entering grades
{
System.out.println("Welcome to the grade calculator. \nPlease enter a
numeric grade. After the last student in the class, enter a grade of
-1.");
inputGrade = reader.nextInt();
letterGrade(inputGrade); // calls letter grade method
findMaxAndMin();
result();
}
}
// find letter grade
public static String letterGrade(int numGrade)
{
String gradeMessage = "";
{
if (numGrade >= 96 && numGrade <= 100) // if numeric grade is 96-100 then
it's A+
{
gradeMessage = "That's an A+.";
result();
// DOES THIS FOR GRADES A+ TO F, NOT SHOWN, too much to paste!
}
}
}
return gradeMessage;
}
public static int findCharGrade(int numGrade)
{
char letter;
if (numGrade >= 90 && numGrade <= 100) // A
{
letter = 'A';
}
else if (numGrade >= 80 && numGrade < 90) // B
{
letter = 'B';
}
else if (numGrade >= 70 && numGrade < 80) // C
{
letter = 'C';
}
else if (numGrade >= 60 && numGrade < 70) // D
{
letter = 'D';
}
else if (numGrade < 60) // F
{
letter = 'F';
}
}
// finds maximum and minimum grades
public static int findMaxAndMin(int inputGrade)
{
int max = Math.max(inputGrade, max);
int min = Math.min(inputGrade, min);
if (inputGrade < max)
{
inputGrade = max;
findCharGrade(inputGrade);
}
else if (inputGrade > min)
{
inputGrade = min;
findCharGrade(inputGrade);
}
}
public static void calcAverage(int sumOfGrades, int numOfStudents)
{
// something goes here
}
// finds results
public static void result()
{
int min = findMaxAndMin(inputGrade);
int max = findMaxAndMin(inputGrade);
System.out.println("Please enter a numeric grade");
int inputGrade = reader.nextInt();
letterGrade(inputGrade);
if (inputGrade == -1)
{
System.out.println("You entered " + numOfStudents + " students. Class
Average: " + average + " Class Minimum: " + min + " Class maximum: " + max
+ " \nThanks for using the class grade calculator!");
}
}
вы должны инициализировать max и min другим способом, чтобы функция работала, т.е. max = int.min_val, min = int.max_val. и также инвертировать предложение if
Вы можете опубликовать весь класс? Мы понятия не имеем, что такое inputGrade.
Ваш код было бы намного легче читать, если бы отступы имели смысл.




Вы можете (и должны) разделить вашу проблему на более мелкие методы. Я брошу код, а вы его прочтите и изучите. Признаюсь, я не уделял этому простому квесту особого внимания, но все же ... А, вот и ты:
import java.util.List;
public class Answer {
public static void main(String[] args) {
//test with some grades (integers)
Answer answer = new Answer();
List<Integer> someGrades = List.of(12, 66, 34, 96, 3, 77, 2);
System.out.println("max = " + answer.findMaxGrade(someGrades));
System.out.println("min = " + answer.findMinGrade(someGrades));
System.out.println("avg = " + answer.findAverageGrade(someGrades));
}
private int findMaxGrade(List<Integer> grades) {
int max = Integer.MIN_VALUE;
for (int grade : grades) {
if (grade > max) max = grade;
}
return max;
}
private int findMinGrade(List<Integer> grades) {
int min = Integer.MAX_VALUE;
for (int grade : grades) {
if (grade < min) min = grade;
}
return min;
}
private double findAverageGrade(List<Integer> grades) {
double average = 0;
for (int grade : grades) {
average += grade;
}
return average / grades.size();
}
}
Спасибо за ответ, но я не рассмотрел списки в моем классе APCS. Я все же попробую использовать это!
@Janie, не стесняйтесь спрашивать меня о чем угодно (например, вы можете поместить свои оценки в массив int вместо списка)
есть ли способ сделать это без списков или массивов?
@ Джени, конечно же! Просто измените параметр метода на int[] grades.
Я никогда раньше не использовал int []. Это массив? @zlakad
@ScaryWombat перед редактированием был без Списка
@zlakad Тогда извини за это.
@ScaryWombat, все в порядке. приятель ... Я никогда не сержусь. Это просто мое хобби. Увидимся...
@Janie, да, int[] - это массив. Задавая вопрос, вы должны быть более конкретными: например, Мне нужно использовать Scanner, или около того ... Я пытался вам помочь, и если вы хотите решить проблему без использования списка или массива, вы сделаете это может. Удачи!
вот более упрощенный способ сделать это без использования Lists или arrays
double sum = 0; // use double so that you do not do integer arithmetic
int count = 0;
int min = Integer.MAX_VALUE; // set to very high value
int max = Integer.MIN_VALUE; // set to bery low value
Scanner scan1 = new Scanner(System.in);
System.out.println("enter numbers (-1 to quit");
while (scan1.hasNextInt()) {
int i = scan1.nextInt(); // get the number (assuming only int value)
if (i == -1) break;
min = Math.min(i, min);
max = Math.max(i, max);
sum += i;
count++;
}
if (count > 0) {
System.out.println("min " + min);
System.out.println("max " + max);
System.out.println("avg " + sum / count);
}
отказ от ответственности
Этот код не будет обрабатывать неправильный тип ввода, например. Струны
редактировать
Если вы хотите, чтобы среднее значение рассчитывалось отдельным методом, у вас может быть такой метод, как
double calcAvg (double sum, int count) {
return sum / count;
}
тогда это можно назвать
if (count > 0) {
System.out.println("min " + min);
System.out.println("max " + max);
System.out.println("avg " + calcAvg (sum, count));
}
вау, я даже не знал, что существуют Math.min и Math.max. супер полезно спасибо
@Janie, если вы боитесь использовать Math.min, вы можете использовать if (i < min) min = i; (аналогичный подход к max). И да, примите этот ответ!
Хорошо, теперь мой новый вопрос: как мне заставить программу отслеживать введенные оценки, чтобы она могла усреднять их в методе calcAverage ()? * см. вопрос для calcAverage () @zlakad
Вы хотите получить среднее значение без использования списка или массива? Просто поместите код для System.out.println("avg " + sum / count); в метод
Этот ответ уже сохраняет введенные оценки и количество студентов в переменных sum и count. Итак, вы можете вызов метод double calcAverage(int sumOfGrades, int numberOfStudents) {return (double) sumOfGrades/numberOfStudents}. Просто как тот
@zlakad calcAverage(int sumOfGrades, int numberOfStudents) {return cumOfGrades/numberOfStudents} - ну нет, это будет целочисленное деление, см. stackoverflow.com/questions/4685450/why-is-the-result-of-1-3 -0
как мне найти сумму, хотя это мой вопрос? Что мне добавить?
@ScaryWombat опечатка: System.out.println("avg " + calcAvg (sum / count)) должен быть System.out.println("avg " + calcAvg (sum, count))
извини, занята в другом месте. Я прочитал комментарии, но не уверен, как мне получить sumOfGrades или numOfStudents. Я попытался разместить numOfStudents ++ в методе, и это не сработало, поэтому я не знаю, как подсчитать записи (как студенты) в программе
Если вы все еще не можете понять это, отредактируйте свой вопрос с помощью нового кода.
Вы читали мой отредактированный ответ? Где ваш код, похожий на мой calcAvg, который содержит два параметра и возвращает double? Почему вы вносите больше вкладов в result?
эээ, Джени - куда я делась?
Я не могу использовать дубль, потому что мой учитель может в этом усомниться. В результате больше ввода, потому что пользователь должен ввести несколько оценок, и я вызываю этот метод из другого метода.
Вы можете и должны использовать double, иначе у вас будет целочисленное деление - см. stackoverflow.com/questions/4685450/why-is-the-result-of-1-3 -0 - вы сможете объяснить, почему вы что-то используете, а не просто что-то не используете
@Janie Похоже, ты проигнорировал все, что я сказал - мы можем удалить этот ответ?
пример пакета;
import java.util.Scanner;
class Example {
public static void main(String[] args) {
Scanner r = new Scanner(System.in);
int m = 1, total = 0, max = 0, min = 100;
double avg = 0;
while (m <= 5) {
System.out.print("Input marks " + m + " = ");
int inp = r.nextInt();
total += inp;
m++;
min=min<inp?min:inp;
max=max<inp?inp:max;
}
avg = (double)(total) / 5;
System.out.println("Total : " + total);
System.out.println("Max : " + max);
System.out.println("Min : " + min);
System.out.println("Average : " + avg);
}
}
Что значит «они не работают»? Что не работает?