Максимальный и минимальный метод java

Эта программа предназначена для поиска максимальных, минимальных и средних оценок. Пользователь вводит 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!");
  }

}

Что значит «они не работают»? Что не работает?

natn2323 15.11.2018 01:17

вы должны инициализировать max и min другим способом, чтобы функция работала, т.е. max = int.min_val, min = int.max_val. и также инвертировать предложение if

Liad Saubron 15.11.2018 01:19

Вы можете опубликовать весь класс? Мы понятия не имеем, что такое inputGrade.

PhaseRush 15.11.2018 01:20

Ваш код было бы намного легче читать, если бы отступы имели смысл.

khelwood 15.11.2018 01:26
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
4
4
3 868
3

Ответы 3

Вы можете (и должны) разделить вашу проблему на более мелкие методы. Я брошу код, а вы его прочтите и изучите. Признаюсь, я не уделял этому простому квесту особого внимания, но все же ... А, вот и ты:

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 15.11.2018 01:54

@Janie, не стесняйтесь спрашивать меня о чем угодно (например, вы можете поместить свои оценки в массив int вместо списка)

zlakad 15.11.2018 01:56

есть ли способ сделать это без списков или массивов?

Janie 15.11.2018 01:56

@ Джени, конечно же! Просто измените параметр метода на int[] grades.

zlakad 15.11.2018 01:58

Я никогда раньше не использовал int []. Это массив? @zlakad

Janie 15.11.2018 01:58
без списков и массивов - в int [] оценки - хм выглядит как массив
Scary Wombat 15.11.2018 01:59

@ScaryWombat перед редактированием был без Списка

zlakad 15.11.2018 02:00

@zlakad Тогда извини за это.

Scary Wombat 15.11.2018 02:02

@ScaryWombat, все в порядке. приятель ... Я никогда не сержусь. Это просто мое хобби. Увидимся...

zlakad 15.11.2018 02:03

@Janie, да, int[] - это массив. Задавая вопрос, вы должны быть более конкретными: например, Мне нужно использовать Scanner, или около того ... Я пытался вам помочь, и если вы хотите решить проблему без использования списка или массива, вы сделаете это может. Удачи!

zlakad 15.11.2018 02:08

вот более упрощенный способ сделать это без использования 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 15.11.2018 02:12

@Janie, если вы боитесь использовать Math.min, вы можете использовать if (i < min) min = i; (аналогичный подход к max). И да, примите этот ответ!

zlakad 15.11.2018 02:35

Хорошо, теперь мой новый вопрос: как мне заставить программу отслеживать введенные оценки, чтобы она могла усреднять их в методе calcAverage ()? * см. вопрос для calcAverage () @zlakad

Janie 15.11.2018 02:43

Вы хотите получить среднее значение без использования списка или массива? Просто поместите код для System.out.println("avg " + sum / count); в метод

Scary Wombat 15.11.2018 02:49

Этот ответ уже сохраняет введенные оценки и количество студентов в переменных sum и count. Итак, вы можете вызов метод double calcAverage(int sumOfGrades, int numberOfStudents) {return (double) sumOfGrades/numberOfStudents}. Просто как тот

zlakad 15.11.2018 02:57

@zlakad calcAverage(int sumOfGrades, int numberOfStudents) {return cumOfGrades/numberOfStudents} - ну нет, это будет целочисленное деление, см. stackoverflow.com/questions/4685450/why-is-the-result-of-1-3‌ -0

Scary Wombat 15.11.2018 02:58

как мне найти сумму, хотя это мой вопрос? Что мне добавить?

Janie 15.11.2018 03:04

@ScaryWombat опечатка: System.out.println("avg " + calcAvg (sum / count)) должен быть System.out.println("avg " + calcAvg (sum, count))

zlakad 15.11.2018 03:13

извини, занята в другом месте. Я прочитал комментарии, но не уверен, как мне получить sumOfGrades или numOfStudents. Я попытался разместить numOfStudents ++ в методе, и это не сработало, поэтому я не знаю, как подсчитать записи (как студенты) в программе

Janie 15.11.2018 04:27

Если вы все еще не можете понять это, отредактируйте свой вопрос с помощью нового кода.

Scary Wombat 15.11.2018 04:38

Вы читали мой отредактированный ответ? Где ваш код, похожий на мой calcAvg, который содержит два параметра и возвращает double? Почему вы вносите больше вкладов в result?

Scary Wombat 15.11.2018 05:08

эээ, Джени - куда я делась?

Scary Wombat 15.11.2018 06:12

Я не могу использовать дубль, потому что мой учитель может в этом усомниться. В результате больше ввода, потому что пользователь должен ввести несколько оценок, и я вызываю этот метод из другого метода.

Janie 15.11.2018 14:56

Вы можете и должны использовать double, иначе у вас будет целочисленное деление - см. stackoverflow.com/questions/4685450/why-is-the-result-of-1-3‌ -0 - вы сможете объяснить, почему вы что-то используете, а не просто что-то не используете

Scary Wombat 16.11.2018 00:54

@Janie Похоже, ты проигнорировал все, что я сказал - мы можем удалить этот ответ?

Scary Wombat 16.11.2018 02:43

пример пакета;

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);

}

}

Другие вопросы по теме