我使用只有一个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;
}
}
答案 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)
使此扫描程序超过当前行并返回跳过的输入。此方法返回当前行的其余部分, 排除末尾的任何行分隔符。该职位设定为 下一行的开头。
当您只使用一个.nextLine()
扫描仪时,会跳过当前行。而你的输入永远不会被阅读。结果quit
变为""
。而你下一个代码行抛出异常。
if (quit.charAt(0) == 'y')
使用:.next()为@UpAllNight建议。