Обработка исключений, первые блоки try / catch не повторяются, пока не будет принят правильный ввод - PullRequest
0 голосов
/ 25 апреля 2018

Написание программы, которая запрашивает у пользователя информацию о том, могут ли они позволить себе автомобиль или нет.при запросе пользователя ввести цену автомобиля мои блоки try / catch не работают должным образом.программа продолжает выполнять код после первого блока try / catch.Стоит отметить, что весь другой код работает так, как нужно (программа запрашивает много двойных чисел, только первый не работает)

import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.InputMismatchException;
import java.util.Scanner;


public class Minimal {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Car car = new Car();
        Scanner sc = new Scanner(System.in);
        PrintWriter out;
        try {
            out = new PrintWriter("number.txt");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return;
        }
        System.out.println("What is the msrp?");

        try 
        {
            double price = sc.nextDouble();
            car.setStickerPrice(price);
            out.println(price);
        }   
        catch (InputMismatchException e) 
        {
            System.out.println("The MSRP is a numberical value, please reenter a number.");
            out.println("The MSRP is a numberical value, please reenter a number.");
        }
        System.out.println("What is your down payment?");
        out.println("What is your down payment?");





        double pay = 0;
        while (true) {

            try {
                pay = Double.parseDouble(sc.next());
                break; // will only get to here if input was a double
            } catch (NumberFormatException ignore) {
                 System.out.println("Invalid input, input a numerical value: ");  
            }
        }



        car.setDownPayment(pay);
        out.println(pay);
        car.setOutTheDoor();
        System.out.println(
                "Please enter your interest rate (APR) as a decimal value. For example, an interest rate of 3% would be entered as '.03.'");
        out.println(
                "Please enter your interest rate (APR) as a decimal value. For example, an interest rate of 3% would be entered as '.03.'");




        double rate = 0;
        while (true) {

            try {
                rate = Double.parseDouble(sc.next());
                break; // will only get to here if input was a double
            } catch (NumberFormatException ignore) {
                 System.out.println("Invalid input, input a numerical value: ");  
            }
        }

    }

}

Вывод:

Чтотакое MSRP?
g
MSRP - это числовое значение, введите число еще раз.
Каков ваш первоначальный взнос?
Неверный ввод, введите числовое значение:
g
Неверный ввод, введите числовое значение:
g
Неверный ввод, введите числовое значение:
1
Пожалуйста, введите процентную ставку (APR) в виде десятичного значения.Например, процентная ставка 3% будет введена как «.03.»
g
Неправильный ввод, введите числовое значение:
g
Неправильный ввод, введите числовое значение:
5

1 Ответ

0 голосов
/ 25 апреля 2018

Это не то, как работают блоки try / catch. Если вам нужно такое поведение, то вам нужно поместить цикл try / catch.

while(true) {
    try { ask question; break; }
    catch { error handling }
}

Вы нажмете «перерыв», только если вопрос не выбрасывает исключение.

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

bool inputValid = false;
while(!inputValid){
    try { ask question; inputValid = true; }
    catch { error handling }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...