-1

おわかりのように、私はこの Stack Over Flow を初めて使用します。プログラミングをしているときは、ほとんどの場合、ここで投稿を読んでしまいます。なかなか良さそうなところだったので、参加することにしました。スパムを許可してくれてありがとう。

私のコードは数分前に機能していました。私が偶然にやったのは愚かなことだと確信しています。数字を入力すると、7作品を除くすべてのメニューオプションが機能します。7 を入力すると、Invalid option というボックスがポップアップ表示されます。if ステートメントを使用して、whatToDo が実際には 7 に等しくても、ボックスがポップアップする可能性があると推測しました。

package TB_Game;

import java.util.Scanner;
import javax.swing.JOptionPane;

public class TB_Game {

public static void main(String[] args) {
    menu();
}

public static void menu() {

    String whatToDo;
    try {
        whatToDo = JOptionPane.showInputDialog("Welcome to the TextBased Game! " + "\n"
                        + "\n" + "Which game do you wish to play?" + "\n"
                        + "1 - Gangup - Work in Progress" + "\n"
                        + "2 - Black Jack - Not Been Finished" + "\n"
                        + "3 - Encryption - Non GUI" + "\n"
                        + "4 - Decryption - Non GUI" + "\n"
                        + "5 - Encryption GUI" + "\n"
                        + "6 - Decryption GUI" + "\n"
                        + "7 - Alchemy - Work In Progress" + "\n"
                        + "8 - Exit");
        if (whatToDo.equalsIgnoreCase("Gangup") || whatToDo.equalsIgnoreCase("1")) {
            gangup.startGangup();
        }
        else if (whatToDo.equalsIgnoreCase("Black Jack") || whatToDo.equalsIgnoreCase("2")) {
            JOptionPane.showMessageDialog(null, "Black Jack has not been finished",
                    "Text Based Game", JOptionPane.PLAIN_MESSAGE);
                    menu();
        }
        else if (whatToDo.equalsIgnoreCase("Encryption") || whatToDo.equalsIgnoreCase("3")) {
            cryption.encrypt();
        }
        else if (whatToDo.equalsIgnoreCase("Decryption") || whatToDo.equalsIgnoreCase("4")) {
            cryption.decrypt();
        }
        else if (whatToDo.equalsIgnoreCase("Encryption GUI") || whatToDo.equalsIgnoreCase("5")) {
            cryptionGUI.encrypt();
        }
        else if (whatToDo.equalsIgnoreCase("Decryption GUI") || whatToDo.equalsIgnoreCase("6")) {
            cryptionGUI.decrypt();
        }
        else if (whatToDo.equalsIgnoreCase("Alchemy") || whatToDo.equalsIgnoreCase("7")) {
            Alchemy.startAlchemy();
        }
        else if (whatToDo.equalsIgnoreCase("Exit") || whatToDo.equalsIgnoreCase("8")) {
            exit();
        } else {
            JOptionPane.showMessageDialog(null, "Invalid Option",
                    "Text Based Game", JOptionPane.PLAIN_MESSAGE);
            menu();
        }
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, "Invalid Option",
                "Text Based Game", JOptionPane.PLAIN_MESSAGE);
        menu();
    }
}

public static void exit() {
    int quit;
    quit = JOptionPane.showConfirmDialog(null,
            "Do you wish to close TB Game?");
    if (quit == 0) {
        System.exit(0);
    } else {
        menu();
    }
}

}

ここにコピーして貼り付けたため、書式設定が少し混乱しています。

4

3 に答える 3

1

オプション 7 のコードの実行中に例外が発生していると思います。

 else if (whatToDo.equalsIgnoreCase("Alchemy") || whatToDo.equalsIgnoreCase("7")) {
        Alchemy.startAlchemy();
    }

また、catch ブロックに従って、例外が発生した場合、次のステートメントの実行中に「無効なオプション」と表示されます

JOptionPane.showMessageDialog(null, "Invalid Option",
                "Text Based Game", JOptionPane.PLAIN_MESSAGE);

したがって、問題は ではAlchemy.startAlchemy()なく にありelse ifます。このようにコードをカプセル化すると、問題がどこにあるかを確認できます。

 else if (whatToDo.equalsIgnoreCase("Alchemy") || whatToDo.equalsIgnoreCase("7")) {
        try {
        Alchemy.startAlchemy();
        } catch(Exception e) {
           System.out.println("The problem is not with else if but the exception");
           e.printStackTrace();
        }
    }
于 2013-11-13T04:04:25.290 に答える