按Enter键时程序将不会继续。如何解决此错误?

时间:2019-05-08 19:27:56

标签: java indexing

我正在为我的Java课做剪刀石头布的作业。我已经完成了程序,并成功编译了它。我运行了文件,看起来它正在运行。它给了我菜单,我选择了一个变量,例如R,当我按Enter键时,它什么也没做,只是转到下一行。我再次按回车键,它给了我一个超出范围的错误索引,我认为这是因为第二次它没有使用变量。我如何使程序向前发展?该程序应该播放五次,然后返回赢家。预先感谢。This image is what I get when I run the program and press enter twice

if args['parm'] is None:
    # do something 
elif args['parm'] == 'yes' and param:
    # do something else
fun_a(x, y, z)
fun_b(x, y, z)
fun_c(x, y, z)

1 个答案:

答案 0 :(得分:3)

您只打印一次输入提示,即在for循环之前。现在,当您输入第一个输入时,将执行循环的内容。因为您在循环中不打印任何内容,所以没有提示进行下一轮操作。再次按下Enter键后,in.nextLine()返回一个空字符串,随后,substring方法引发异常。

您可能应该执行以下操作(注意标记的行):

System.out.println("\tMenu\n\n(R) Rock\n(P) Paper\n(S) Scissors" + "\n\n");
    for (int i=0; i<5; i++) {
>        System.out.println("Enter Your Hand (R, P, or S): ");
        String myHandString = in.nextLine();
        String myHand = myHandString.substring(0,1);
        myHand = myHand.toUpperCase();
        index = (int)(Math.random() * 10) % 3;
        computerHand = computerHandArray[index];
        thisWinner = theWinnerofOneGame(myHand, computerHand);

        if(thisWinner.equals("ME")){
            timesIWon++;
>            System.out.println("You won.");
        } else if(thisWinner.equals("COMPUTER")) {
            timesComputerWon++;
>            System.out.println("The computer won.");
        }
    }

更好的是,在计算子字符串之前检查用户输入是否有效。