4

次のコードでは、を取得しUnreachable catch block for IOExceptionます。この例外は、tryステートメントの本文エラー(下線付き)からスローされることはありませIOException} catch (IOException e){

class driver {

  public static void main(String[] args) {
    // TODO Auto-generated method stub
    Customer forrest = new Customer("Forrest Gump", 1,
        "42 New Street, New York, New York");
    Customer random = new Customer("Random Name", 2,
        "44 New Street, New York, New York");
    Customer customer[] = { null, forrest, random };
    int whichOption = 1;
    int id = 0;
    char action = ' ';
    char accSrc = ' ';
    char accDest = ' ';
    double amount = 0;
    BankAccount src = null;
    do {

      try{
        // process JOptionPane input information
        String input = JOptionPane
            .showInputDialog("Please enter your transaction information: ");
        Scanner s = new Scanner(input);
        id = Integer.parseInt(s.next());
        action = Character.toUpperCase((s.next().charAt(0)));

        if (action == 'T') {
          amount = s.nextDouble();
          accSrc = s.next().charAt(0);
          accDest = s.next().charAt(0);
        } else if (action == 'G' || action == 'I') {
          accSrc = s.next().charAt(0);
        } else {
          // if D,W
          amount = s.nextDouble();
          accSrc = s.next().charAt(0);
        }

      } catch (IOException e){

      }
      // taking action accordingly (T)ransfer, (D)eposit, (W)ithdraw, (I)nterest
      if (action == 'T') {

        (customer[id].getAccount(accSrc)).transfer(amount,
            customer[id].getAccount(accDest));
      } else if (action == 'G') {
        System.out.println("The current balance on your " + accSrc
            + " account is "
            + customer[id].getAccount(accSrc).getBalance() + "\n");
      } else if (action == 'D') {
        (customer[id].getAccount(accSrc)).deposit(amount);
      } else if (action == 'W') {
        (customer[id].getAccount(accSrc)).withdraw(amount);
      } else if (action == 'I') {
        (customer[id].getAccount(accSrc)).computeInterest();
      }
      whichOption = JOptionPane
          .showConfirmDialog(null , "Do you want to continue?");

      System.out.println("The balance on " + customer[id].getName()
          + " auto account is " + customer[id].A.balance);
      System.out.println("The balance on " + customer[id].getName()
          + " savings account is " + customer[id].S.balance);
      System.out.println("The balance on " + customer[id].getName()
          + " checkings account is " + customer[id].C.balance);
      System.out.println("The balance on " + customer[id].getName()
          + " loan account is " + customer[id].L.balance + "\n");

    } while (whichOption == 0);

  }
}
4

6 に答える 6

11

これは、内部で実行する操作のいずれもtry/catchIOExceptionをスローしないためです。

Scannerjavadocによる

ほとんどのScannerクラスのメソッドは、次のいずれかをスローしますFileNotFoundException(ファイルから読み取らないため、このケースには適用されません)(または)IllegalArgumentException(または)IllegalStateException

上記の例外のいずれかに変更IOExceptionする(または)try/catchを削除する必要があります。

于 2012-11-13T21:07:22.600 に答える
4

try catch内のどのステートメントもこの例外をスローしていないため、IOExceptionとtrycatchを削除できます。

于 2012-11-13T21:14:04.397 に答える
3

ブロックcatchは空です。これは、とにかく、実際には例外を処理するつもりがなかったことを示しています。あなたはおそらくそこにあなたがそれを捕まえるようにしたいくつかのコードを持っていました、しかし今あなたはそれをもう持っていません。周囲全体を取り除くだけtry-catchで、それ以上の問題は発生しません。

于 2012-11-13T21:12:09.467 に答える
3

tryそのブロックで何もしていないようですIOException

于 2012-11-13T21:06:58.140 に答える
3

そのtryブロックのメソッド呼び出しは、をスローしませんIOException。そのため、catchは到達不能コードです。

そのような状況は決して起こらないので、tryとcatchの両方を安全に削除できます。

于 2012-11-13T21:07:25.117 に答える
1

try/catchブロックは空で、コードはスローされませんIOExceptionが、他の例外がスローされる可能性があります。

于 2012-11-13T21:22:45.217 に答える