Java异常处理Do循环不起作用?

时间:2012-10-06 12:23:52

标签: java exception loops

以下是代码:

package classes;
import java.util.*;

public class Introduction {
    Scanner Input = new Scanner(System.in);
    int classChoose;
    boolean repeat = false;

    public void Introduction() {
        System.out.println("\t===THE QUEST FOR PERSEPOLIS===\tv 1.0\n");
        System.out.println("Please choose a class: ");
        System.out.print("(1)Elite Knight\t");
        System.out.print("(2)Dawnguard\n");
        System.out.print("(3)Archer\t\t\t");
        System.out.print("(4)Barbarian\n");
        System.out.print("(5)Mage\t\t\t");
        System.out.print("(6)Swordsman\n");
        System.out.println("(7)Crossbowman\t");

        do {
            try {
                repeat = false;
                classChoose = Input.nextInt();
                while(classChoose < 1 || classChoose > 7) {
                    repeat = false;
                    System.out.println("Error. Enter a number between 1 and 7(inclusive).");
                    classChoose = Input.nextInt();
                }
            }
            catch(InputMismatchException e) {
                repeat = true;
                System.err.println("Caught: "+e);
                Input.nextLine();
            }
        }while(repeat = true);

        switch(classChoose) {
            case 1: chooseKnight();
                    break;
            case 2: chooseGuard();
                    break;
            case 3: chooseArcher();
                    break;
            case 4: chooseBarbarian();
                    break;
            case 5: chooseMage();
                    break;
            case 6: chooseSwordsman();
                    break;
            case 7: chooseCrossbowman();
                    break;
        }
    }
    public static void chooseKnight() {
        System.out.println("You have chosen the Elite Knight. You will be briefed and then you shall be set "
        +"on your quest!");
    }
    static void chooseGuard() {
        System.out.println("You have chosen the Dawnguard. You will be briefed and then you shall be set "
        +"on your quest!");
    }
    static void chooseArcher() {
        System.out.println("You have chosen the Archer. You will be briefed and then you shall be set "
        +"on your quest!");
    }
    static void chooseBarbarian() {
        System.out.println("You have chosen the Barbarian. You will be briefed and then you shall be set "
        +"on your quest!");
    }
    static void chooseMage() {
        System.out.println("You have chosen the Mage. You will be briefed and then you shall be set "
        +"on your quest!");
    }
    static void chooseSwordsman() {
        System.out.println("You have chosen the Swordsman. You will be briefed and then you shall be set "
        +"on your quest!");  
    }
    static void chooseCrossbowman() {
        System.out.println("You have chosen the Crossbowman. You will be briefed and then you shall be set "
        +"on your quest!");
    }
}

每次我运行它,程序都会提示我选择我的课程。在我输入我的选择之后,程序不会继续执行do循环下面的switch语句。有人可以帮我解决这个问题吗?

-Calvin

2 个答案:

答案 0 :(得分:2)

while(repeat = true);

应该是: -

while(repeat == true);  // Or better: -  while(repeat);

在您的抓取中,将Input.nextLine()更改为Input.next(): -

catch(InputMismatchException e) {
    repeat = true;
    System.err.println("Caught: "+e);
    Input.nextLine();  // Change to Input.next()
}

您的实例变量应以小写字母或下划线开头。所以将Input更改为input

答案 1 :(得分:2)

这是一项任务:

 while(repeat = true); // Note single '=', not '=='

,其结果始终为true,来自Java语言规范的15.26 Assignment Operators部分:

  

在运行时,赋值表达式的结果是变量的值   分配完成后。

更改为:

while(repeat);
相关问题