0
public void processing()
{

    System.out.println("Please enter the amount of saving per month: ");

    try
    {
        while(input.hasNext())
        {
            setSavingPermonth(input.nextDouble());

            System.out.println("Please enter expected interest rate: ");
            setInterestRate(input.nextDouble());

            System.out.println("Please enter number of month for saving: ");
            setNumberOfMonth(input.nextInt());

            displayInputs();
            System.out.println();
            totalContibution();
            totalSavingAmount();

            System.out.println();
            System.out.println("\nPlease enter the amount of saving per month: \n(or <Ctrl + D> to close the program)");
        }
    }
    catch(InputMismatchException inputMismatchException)
    {
        System.err.println("Input must be numeric. \ntry again: ");
              //**Anything need to done here in order to go back to setInterestRate()?**
    }
}

例外が誤入力の例外をキャッチする前の場所に戻りたいです。たとえば、setInterestRate() の文字列を入力すると、Java がそこでキャッチし、エラー メッセージを表示します。そこに正しいデータを再入力できるようにするには?

4

2 に答える 2

3

次のメソッドを使用するようにコードを書き直します。

static double inputDouble(Scanner input) {
  while (input.hasNext()) try {
    return input.nextDouble();
  }
  catch (InputMismatchException e) {
    System.out.println("Wrong input. Try again.");
    input.next(); // consume the invalid double
  }
  throw new IOException("Input stream closed");
}
于 2013-01-20T16:10:49.480 に答える
1

次の 2 つの方法を使用して、integer と double を取得できます。

static int getIntInput(Scanner input) {
    while(true)
    {
        try {
            if (input.hasNext()) {
                return input.nextInt();
            }
        } catch (InputMismatchException  e) {
            System.err.println("Input must be numeric. \ntry again: ");
            input.next();
        }
    }
}

static double getDoubleInput(Scanner input) {
    while(true)
    {
        try {
            if (input.hasNext()) {
                return input.nextDouble();
            }
        } catch (InputMismatchException  e) {
            System.err.println("Input must be numeric. \ntry again: ");
            input.next();
        }
    }
}
于 2013-01-20T16:31:33.840 に答える