请让我先口头描述问题。
您在控制台上看到的是问题所在。
编码使用Scanner和switch-statement完成。
我意识到的一件事是它们按照我输入数字的顺序打印:2,3,2,4。因此,控制台中的输入变为输入,switch语句将其作为输入。
我不知道为什么会这样。我有很多switch语句,它不是唯一有这个问题的switch语句。以下代码是switch-statement的代码。
public static void chooseMMCha1(Character member) {
boolean wrongAnswer;
do {
wrongAnswer = false;
Scanner sc = new Scanner(System.in);
while(!sc.hasNextInt()) {
sc.next();
}
switch (sc.nextInt()) {
case 1:
chooseMMCha(chosenMember[0], member);
break;
case 2:
chooseMMCha(chosenMember[1], member);
break;
case 3:
chooseMMCha(chosenMember[2], member);
break;
case 4:
chooseMMCha(chosenMember[3], member);
break;
case 5:
chooseMMCha(chosenMember[4], member);
break;
case 6:
turn(member);
break;
default:
System.out.println("From 1 to 6");
wrongAnswer = true;
break;
}
}while(wrongAnswer);
}
看来你在这里是非预期的递归。
在你的chooseMMCha1()
方法中,你打电话给chooseMMCha()
。然后,此方法检查选择是否有效。如果不是那么它再次调用chooseMMCha1()
。
但是,一旦你输入了一个有效的输入,对chooseMMCha1()
的调用将从堆栈中移出,它将返回你对chooseMMCha()
的调用。一旦它返回到这里,你打印出该角色已经愈合。因此,一旦输入有效输入,您推入堆栈的所有无效输入都将解析,并且您的方法将打印出它们已被修复。
在输入无效的情况下,您需要在调用return;
之后放置一个chooseMMCha1()
语句,以确保在无效输入从堆栈中移出后您不再继续使用该方法:
if(chosenMember.getMP() == chosenMember.getMaxMP()) {
System.out.println(chosenMember +"'s MP is already full");
chooseMMCha1(member);
return; //Exit the method
}