-1

JOptionPane への不適切な入力がある場合、Exception 句のbreak;ステートメントはプログラム全体を停止します。catch ブロックの後にあるものを実行しません。なぜですか?

public static void main(String[] args) {
        // TODO Auto-generated method stub
        Customer forrest = new Customer("Forrest Grump", 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 (Exception e){
                System.out.println("Invalid input!");
                break;
            }
            // 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);
                //You have successfully depositted $xx.xx
            } 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

4 に答える 4

3

あなたを使用breakするとループから飛び出すので(そしてそれがあなたのプログラムの終わりです)、キャッチブロック部分の後に実行したい場合は、単に削除してくださいbreak;


見る

于 2012-11-17T01:41:13.463 に答える
1

私はあなたが望んでいると思いますがcontinue、そうではありませんbreak。ここで違いを参照してください:

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html

continueは、ループ本体の後続のステートメントをすべてスキップしてループ本体の先頭に戻り、条件を再チェックして、そこから通常どおりループを続行するようにループに指示します。

breakループ本体のそれ以降の命令を無視して、ループをただちに終了するように指示します。

于 2012-11-17T01:45:22.660 に答える
0

break囲んでいるループから脱出します。これは、あなたの場合、メインの終わりを意味します...

于 2012-11-17T01:41:43.963 に答える
0

ループから抜け出し、メソッドbreakのループの後に何も残っていません。mainループを続けたい場合は、break;をに置き換えcontinue;ます。

于 2012-11-17T01:42:31.067 に答える