String ArrayList和Output

时间:2014-11-16 23:35:05

标签: arraylist printing

我遇到的问题是,在输入哨兵之前有一个偶数的输入时,它只输出偶数字符串(例如:是,否,-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);
    }
}

1 个答案:

答案 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)
}

这样,您可以测试您正在阅读的行不是标记值,并且您可以将其添加到集合中。 希望有所帮助