1

我使用只有一个的程序运行quit = input.nextLine();,但这会导致错误。但是,如果我两次使用该行,则不会发生错误,并且程序按预期运行。 为什么?

错误信息:Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0 at java.lang.String.charAt(String.java:686) at testjava.Test.main(Testjava.java:24)

    import java.util.Scanner;

    public class Test
    {
        public static void main(String[] args)
        {
            boolean x = true;
            boolean y = true;
            Scanner input = new Scanner(System.in);

            while (x) {
                while (y) {
                    System.out.print("Enter -1 to quit ");
                    int val = input.nextInt();
                    if (val == -1)
                        y = false;
                }  

                System.out.print("Are you sure you want to quit? (y/n) ");
                String quit = input.nextLine();
                quit = input.nextLine();

                if (quit.charAt(0) == 'y')
                    x = false;                  
            }
        }
4

3 回答 3

0

您应该使用 input.next()。

input.nextLine() 跳过当前行并输出被跳过的行。

于 2013-08-23T01:43:10.307 回答
0

我的猜测是你输入的数字相当(-1)没有得到行尾字符,只有你的第一个字符才能抓住nextLine()

我认为你应该得到数字的整行然后解析 int :

 System.out.print("Enter -1 to quit ");
 String line = input.nextLine();
 int val = Integer.parseInt(line);

 ...
于 2013-08-23T01:44:43.310 回答
0

扫描仪#nextLine()

将此扫描器前进到当前行并返回被跳过的输入。此方法返回当前行的其余部分,不包括末尾的任何行分隔符。位置设置为下一行的开头。

当您只使用一个.nextLine()扫描仪时,会跳过当前行。而且您的输入永远不会被读取。结果quit就变成了""。你的下一个代码行抛出异常。

if (quit.charAt(0) == 'y')

使用:.next()正如@UpAllNight 建议的那样。

于 2013-08-23T01:49:08.323 回答