Циклы И Обработка Ошибок Ввода Данных

Я пытаюсь создать программу Java, которая позволит пользователю ввести любое желаемое количество числовых оценок, а затем вычислить MINMAX& Average. Обработка ошибок ввода, где это становится запутанным для меня.

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

// APPROACH ONE:
double grade = 0;
while (grade != -1) {
    grade = input.nextDouble();
}

// APPROACH TWO:
System.out.println("Enter number of grades: ");
double num = input.nextDouble();
for (int i = 1, i <= num, i++) {           
    System.out.println("Enter grade: ");                
    double grade = input.nextDouble();
}

I need to incorpe messages to alert user when numbers outside parameters are Enter-lettesr, words, etc. Когда я пытаюсь реализовать эти циклы обработки ошибок, я не могу понять, как заставить циклы игнорировать ошибочные ответы.

Например, в моем подходе два, если пользователь вводит 3 класса, а затем вводит89.5,93.4,-1, моя программа просто заканчивается, потому что он думает, что -1находится в стороне от 3 классов.

Я не могу понять, как заставить его распознавать -1, отображать ошибку, а затем запрашивать еще одну запись в total 3. Возможно, подход один было бы проще, так как нет заданного числа рангов, которые предопределены.

2 ответа

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

    double num = input.nextDouble();
    for (int i = 1, i <= num, i++) {
        System.out.println("Enter grade:  ");
        double grade = input.nextDouble();
    
        while(grade < 0.0 || grade > 100.0) {
            System.out.println("Invalid imput. Please reenter grade number " + n);
            grade = input.nextDouble();
        }
    }
    

    Это помещает пользователя в цикл, из которого он не может выйти, пока не введет число между 0 и 100, и значение n в цикле for не будет обновляться, пока они не введут допустимое число.

  2. Чтобы дать предупреждающие сообщения пользователям, вы, вероятно, хотите поэкспериментировать с try/catchинструкциями (обработка исключений), а также включить логические значения в качестве элементов управления для циклов while. Кроме того, видя, что ваш код требует от пользователя ввести несколько чисел, я предполагаю, что вам нужно будет использовать какойarray/arraylist-то, чтобы помочь вычислить min/max/avg. Следовательно, ваш код может оказаться чем-то вроде этого:

    public static ArrayList<Double> getdouble(ArrayList<Double> a){
        boolean control = true;
        boolean control2 = true;
        double grade = 0;
        while (control == true){
    
            while (control2 == true){
                System.out.println("enter grade or -1 to end");
                Scanner input = new Scanner(System.in);
                try {
                    grade = input.nextDouble();
                    if (grade == -1){
                        control2 = false;
                        break;
                    }
                    a.add(grade);
                } catch (Exception e){
                    System.out.println("error");
                        control2 = false;
                }
            } // end control2
    
            System.out.println("input Y to continue adding grades or any other button to exit");
                Scanner input2 = new Scanner (System.in);
                if (input2.nextLine().toUpperCase().equals("Y")){
                    control2 = true;
                } else {
                    control = false;
                }
        } //end control
        return a;
    }
    
    public static void main(String [] args){
    
        ArrayList<Double> x = new ArrayList<Double>();
        getdouble(x);
        System.out.println(x);
    }