除非我要求两次相同的输入,否则为什么会出现错误? (JAVA)

时间:2013-08-23 01:39:15

标签: java input while-loop conditional

我使用只有一个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;                  
            }
        }

3 个答案:

答案 0 :(得分:0)

你应该使用input.next()。

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

答案 1 :(得分:0)

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

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

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

 ...

答案 2 :(得分:0)

来自Scanner#nextLine()

  

使此扫描程序超过当前行并返回跳过的输入。此方法返回当前行的其余部分,   排除末尾的任何行分隔符。该职位设定为   下一行的开头。

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

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

使用:.next()为@UpAllNight建议。