即使我添加了一个哨兵,我的代码也不起作用。它永远循环。
boolean exit = true;
Scanner sc = new Scanner(System.in);
ArrayList<String> inputData = new ArrayList<String>();
ArrayList<Integer> outputData = new ArrayList<Integer>();
while(sc.hasNext() && exit) {
String aStr = sc.next();
String sentinel = "0 0 0";
if(aStr.equals(sentinel)){
exit = false;
System.out.println("Failed");
}
else{
inputData.add(aStr);
}
}
sc.close();
这是什么原因?
答案 0 :(得分:0)
问题是next()
使用空格作为分隔符,将输入0 0 0
“分解”为0
的3个不同输入。
替换:
String aStr = sc.next();
使用:
String aStr = sc.nextLine();
和
if(aStr.equals(sentinel)){
exit = false;
System.out.println("Failed");
}
使用:
if(aStr.equals(sentinel)){
System.out.println("Failed");
break;
}
完整代码:
Scanner sc = new Scanner(System.in);
ArrayList<String> inputData = new ArrayList<String>();
while(sc.hasNext()) {
String aStr = sc.nextLine();
String sentinel = "0 0 0";
if(aStr.equals(sentinel)){
System.out.println("Failed");
break;
}
else{
inputData.add(aStr);
}
}
System.out.println(Arrays.toString(inputData.toArray())); // for debug
sc.close();
答案 1 :(得分:0)
Scanner的默认分隔符是空格。所以问题出在那里。
String aStr = sc.nextLine();
这样可行。
您还可以尝试以下内容:
String address = System.console().readLine("Enter your Address: ");
这将允许您阅读整行。希望这会有所帮助。