开关:输入仍然在控制台(我已经多次问过这个问题,但似乎没有人知道为什么)

问题描述 投票:-1回答:1

enter image description here

请让我先口头描述问题。

您在控制台上看到的是问题所在。

编码使用Scanner和switch-statement完成。

  1. 它询问用户,你想给谁MP部分。 (每个角色的MP最大值为30)
  2. 我想测试并尝试2,3,2,4输入以查看它会说什么,并且正如您所看到的,它说,“Jongwoo的MP已满。选择不同的角色......”所有其他角色也是如此预计,除了Kyungseok,他的MP目前是15.因此,当我输入1(对于Kyungseok)时,它说Kyungseok的MP已经愈合,并且突然其余的角色做同样的事情。 (请忽略它愈合的量,我需要修复它)

我意识到的一件事是它们按照我输入数字的顺序打印: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);
}
java switch-statement java.util.scanner
1个回答
0
投票

看来你在这里是非预期的递归。

在你的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
}
© www.soinside.com 2019 - 2024. All rights reserved.