我遇到的问题是,在输入哨兵之前有一个偶数的输入时,它只输出偶数字符串(例如:是,否,-1将打印否)和当有奇数时输入,即使使用了哨兵,程序也会继续运行。
//takes words (strings) from the user at the command line
//returns the words as an ArrayList of strings.
//Use a sentinel to allow user to tell the method when they are done entering words.
public static ArrayList<String> arrayListFiller(){
ArrayList<String> stringArrayList = new ArrayList();
System.out.println("Enter the Strings you would like to add to the Array List.");
System.out.println("Type -1 when finished.");
Scanner in = new Scanner(System.in);
while(!in.nextLine().equals("-1")){
String tempString = in.nextLine();
stringArrayList.add(tempString);
}
return stringArrayList;
}
public static void printArrayListFiller(ArrayList<String> stringArrayList){
for(int i = 0; i < stringArrayList.size(); i++){
String value = stringArrayList.get(i);
System.out.println(value);
}
}
答案 0 :(得分:1)
我认为你遇到的问题是你多次调用nextLine。如果你看看这些代码行,
while(!in.nextLine().equals("-1")){
String tempString = in.nextLine();
stringArrayList.add(tempString);
}
说我想进入&#34; Bob&#34;然后-1退出。你正在做的是阅读&#34; Bob&#34;测试它不是哨兵但是你在哨兵中阅读并将它添加到集合中。(甚至测试它是哨兵值)
我的解决方法是只调用nextLine方法一次,然后在获得它时对其进行测试,然后对其进行处理。要做到这一点,你必须在while循环之外有一个局部变量并将它分配给nextLine(),即
String temp
while(!(temp=in.nextLine()).equals("-1")) {
.add(temp)
}
这样,您可以测试您正在阅读的行不是标记值,并且您可以将其添加到集合中。 希望有所帮助