开关箱在Do内。。而+;Java中的错误

开关箱在Do内。。而+;Java中的错误,java,switch-statement,case,do-while,Java,Switch Statement,Case,Do While,因此,我尝试创建一个分配程序,用户在其中选择一种动物,并根据该动物(狗/鸡/鱼)的腿数。如果用户没有选择3种动物中的一种,游戏会询问用户是否愿意再次玩。如果答案为y,则程序将重新启动,但如果答案为n,则程序将停止。该错误位于底部附近,表示“String gameAnswer=input.nextLine();”。它说我必须重新命名gameAnswer。有人能帮我解决这个问题,让程序正常工作吗 提前谢谢 public static void main(String[] args) { S

因此,我尝试创建一个分配程序,用户在其中选择一种动物,并根据该动物(狗/鸡/鱼)的腿数。如果用户没有选择3种动物中的一种,游戏会询问用户是否愿意再次玩。如果答案为y,则程序将重新启动,但如果答案为n,则程序将停止。该错误位于底部附近,表示“String gameAnswer=input.nextLine();”。它说我必须重新命名gameAnswer。有人能帮我解决这个问题,让程序正常工作吗

提前谢谢

public static void main(String[] args) {

    Scanner input = new Scanner(System.in);
    System.out.println("Choose an animal: ");
    String text = input.nextLine();
    char n;
    char y;
    char gameAnswer = 'n';

    do
        {
        switch (text) {
        case "dog":
            System.out.println("How many legs does a dog have?");
            int dg = input.nextInt();

            if(dg == 4)
            {
                System.out.println("You win!");
            }
            else
            {
                System.out.println("You lose!");
            }
            break;

        case "chicken":
            System.out.println("How many legs does a chicken have?");
            int chkn = input.nextInt();

            if(chkn == 2)
            {
                System.out.println("You win!");
            }
            else
            {
                System.out.println("You lose!");
            }
            break;

        case "fish":
            System.out.println("How many legs does a fish have?");
            int fsh = input.nextInt();

            if(fsh == 0)
            {
                System.out.println("You win!");
            }
            else
            {
                System.out.println("You lose!");
            }
            break;

            default:
                break;
        }
        }
    while(gameAnswer == 'y');
    System.out.println("I don't know that animal. Do you want to try again? (y/n)");
    String gameAnswer = input.nextLine();
    }

行的提示和读取应该在您的循环中

不是

但是

gameAnswer
已经定义,所以不要重新定义它

而且

您可能需要
gameAnswer=input.nextLine().charAt(0)

编辑

还动

System.out.println("Choose an animal: ");
String text = input.nextLine();
追求

do

我得到的唯一错误是
String gameAnswer=input.nextLine()的最后一行,因为
gameAnswer
已经定义好了…所以我有点困惑。如何使游戏答案在程序中保持一致?我的意思是,如果我必须重命名gameAnswer,如何让程序再次提示输入第一条语句(请选择一只动物)?我不需要把gameAnswer放在我放的地方吗?不,你需要放在我放的地方。由于您已经在相关范围内定义了一次
gameAnswer
,因此无需再次执行。如果用
但是
替换
而不是
代码,你应该是对的。好的,我没有显示错误,但是当我运行代码时,我遇到了问题。1.如果我输入了错误的动物(如猫),程序会告诉用户它不知道该动物,并询问用户是否愿意再试一次。在我输入y后,程序再次告诉用户它确实了解该动物,并询问用户是否愿意再试一次。第二个问题是,当我输入正确的动物并输入正确或错误的腿数时,在程序说“你输了”或“你赢了”后,它说我不认识该动物。你想再试一次吗?(y/n)线程“main”java.lang.StringIndexOutOfBoundsException中的异常:字符串索引超出范围:0位于AnimalGame.main(AnimalGame.java:64)的java.lang.String.charAt(未知源)中
System.out.println("Choose an animal: ");
String text = input.nextLine();
do