扫描程序崩溃捕获语句

时间:2017-12-08 15:35:31

标签: java

当我尝试在其中使用扫描程序时,我遇到了catch语句崩溃的问题。我正在为我的comp sci课程制作一个简单的石头剪刀程序,我的目标是让它几乎不可能崩溃。这是我的代码:

public class RPS {

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    Random gen = new Random();
    int rounds = 0, choice, playerchoice = 0, complete, playerwins, compwins;
    String cont = "y";

    System.out.println("Rock, Paper, Scissors!");

    while ("y".equalsIgnoreCase(cont)) {
        complete = 0;
        playerwins = 0;
        compwins = 0;
        System.out.println("How many rounds would you like to play?"
                + " (1, best of 3, or best of 5)");

        while (true) {

            try {
                rounds = scan.nextInt();
                while (rounds != 1 && rounds != 3 && rounds != 5) {
                    System.out.println("Invalid number of rounds.");
                    System.out.println("One game, best of 3, or best of 5?");
                    rounds = scan.nextInt();
                }
                break;

            } catch (Exception e) {
                while (rounds != 1 && rounds != 3 && rounds != 5) {
                    System.out.println("Invalid number of rounds.");
                    System.out.println("One game, best of 3, or best of 5?");
                    rounds = scan.nextInt();
                }
            }
        }

除非netbeans在try块中抛出InputMismatchException,否则我的代码会完美无缺。虽然catch语句应该停止这种事情,但它仍然崩溃,我不知道为什么。

由于我是一名可怜的高中生,我为可能正在使用的任何可怕的编码做法道歉。我唯一的目标是让它发挥作用。

1 个答案:

答案 0 :(得分:1)

尝试{this} / Catch {that}就像是说“试试这个,如果不起作用,那就去做吧”。这里的问题是你在catch块中放入与try块相同的代码。想象一下:

  1. 我们输入Try块
  2. 用户输入无效的内容
  3. 因此,我们去了catch块
  4. 现在,用户位于catch块中,他们输入的内容无效
  5. 现在我们失败了,但我们无处可去!我们已经进入了捕获区。
  6. 我们失败了
  7. scan.nextInt();无论何时收到无效输入都会失败,所以每当你调用该函数时,它应该在try块内。

    因此,这可以简单地通过将捕获块留空(或者仅打印“请输入有效数量的回合!”而不执行任何其他操作)来解决。如果我们未能进入catch区块,则不会发生任何事情,我们将点击while循环并返回try区块再次进行攻击。