2

このコードは、入力ストリームから提供された分母で 24 を除算するときに例外をキャッチすることになっています。0 で除算するとき、ユーザーが「hello」などの単語を入力した場合、またはユーザーが入力する可能性のあるその他の奇妙なことなど、例外をキャッチする必要があります。また、小数を入力した場合、戻り値は整数でなければなりません。例外がキャッチされた場合、プログラムは、有効な整数が入力されるまで、別の整数を入力するようにユーザーに要求する必要があります。

私が抱えている問題は、単語が入力された場合や小数が入力された場合に、プログラムが例外をキャッチしていないことです。私は何を間違っていますか。

  public class Division {

  public int quotient(int numerator){
  boolean flag = false;
  Scanner s = new Scanner(System.in);
  int denom = 0;      
  while(flag==false){
      denom = Integer.parseInt(s.next());
      try{
          int q = numerator/denom;
      } catch(NumberFormatException nfe){
          System.out.print("Enter an integer:");
          continue;
      } catch(InputMismatchException ime){
          System.out.print("Enter an integer:");
          continue;
      } catch(ArithmeticException ae){
          System.out.print("Enter a non-zero integer:");
          continue;
      }
      flag=true;
  }
  return numerator/denom;
  }

  public static void main(String[] args) {
      System.out.print("Enter an integer (although you can make mistakes): ");
      System.out.println("The quotient is " + new Division().quotient(24));
      System.out.println("Done!");
  }

}
4

3 に答える 3

2

このステートメントを移動

denom = Integer.parseInt(s.next());

try/catchブロックに引っかかるようにブロックNumberFormatException

すなわち

try {
    denom = Integer.parseInt(s.next());
    ...
} catch (NumberFormatException nfe) {
    System.out.print("Enter an integer:");
    continue;
} catch (...) {

読む: try ブロック

于 2013-09-26T23:53:15.103 に答える
2

ステートメントは、そのブロック内catch起動された例外のみをキャプチャします。ステートメントをブロック内に移動します。tryInteger.parseInttry

于 2013-09-26T23:53:16.320 に答える
1

例外が実際にキャッチされるように、後ではなくtry{BEFORE が発生する必要があります。denom = Integer.parseInt(s.next());

于 2013-09-26T23:53:11.460 に答える