Arhn - архитектура программирования

Обработка исключений

Я хочу, чтобы пользователь мог вводить два int после неправильного ввода. Я попытался продолжить; в блоке catch, но он выдал только ошибки времени выполнения. Я просто хочу, чтобы он вернулся к началу основного метода после выдачи ошибки. Посмотрите, как на картинке он не позволял пользователю вводить какие-либо числа. Я хочу исправить эту часть.

Вот код. Это только для практики.

/**
practing exceptions, example 1 in book for exceptions 
*/ 

    import java.util.Scanner;

    public class PracticeExceptions extends Exception {

    public static void main(String[] args)
    {
     String response = "y";
     Scanner keyboard = new Scanner(System.in);

     do{ 
     int n1, n2;
     double r;
     System.out.println("Please enter two numbers");

     try{
            n1 = keyboard.nextInt();
            n2 = keyboard.nextInt();
            r = (double) n1/n2;     

        System.out.format("Your answer: %.2f %n", r);

       }catch(Exception a){

       System.out.println("Invaild input please try again");

       }

       System.out.println("Again (y/n)");
       response = keyboard.next();

       }while(response.equalsIgnoreCase("y"));
     }
   }
20.02.2017

  • Перехват и игнорирование любого исключения — крайне плохая практика. Просто используйте if 20.02.2017
  • Не уверен, что вы имеете в виду, это просто для практики для более низкого уровня java. Может быть, не лучший, но я изучил только ограниченное количество java. Так что это только для практического использования 20.02.2017
  • @MonkeyMonster Я имею в виду, что вместо try-catch используйте if. Вы ожидаете, что пользователь даст вам недопустимое значение (n2=0). Try-catch следует использовать для исключений, которые не зависят от пользователя. Вы можете сделать то же самое с if(n2==0){isValid=false;} 20.02.2017

Ответы:


1

Избавьтесь от недопустимого ввода в буфере сканера

 }catch(Exception a){
    System.out.println("Invalid input please try again");
    keyboard.next();
 }

Теперь код упадет до System.out.println("Again (y/n)");

Если вы хотите вернуться к началу, добавьте continue после keyboard.next();

20.02.2017
  • Если я это сделаю, он все равно не попросит пользователя ввести еще два целых числа или даже не позволит им 20.02.2017
  • Спасибо, я только что добавил продолжить, сработало гладко. Я видел, что происходит. 20.02.2017
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..