当我尝试在其中使用扫描程序时,我遇到了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语句应该停止这种事情,但它仍然崩溃,我不知道为什么。
由于我是一名可怜的高中生,我为可能正在使用的任何可怕的编码做法道歉。我唯一的目标是让它发挥作用。
答案 0 :(得分:1)
尝试{this} / Catch {that}就像是说“试试这个,如果不起作用,那就去做吧”。这里的问题是你在catch块中放入与try块相同的代码。想象一下:
scan.nextInt();无论何时收到无效输入都会失败,所以每当你调用该函数时,它应该在try块内。
因此,这可以简单地通过将捕获块留空(或者仅打印“请输入有效数量的回合!”而不执行任何其他操作)来解决。如果我们未能进入catch区块,则不会发生任何事情,我们将点击while循环并返回try区块再次进行攻击。