2

当将用户输入打印为一行中的单个单词时,我会打印出该行中的所有单词。

System.out.println(userInput.next());

但是,当我将单个单词添加到 ArrayList 时,我似乎得到了随机单词:

 al.add(userInput.next());

有人可以向我解释发生了什么吗?

谢谢。

这是代码的完整副本:

import java.util.*;


public class Kwic {
    public static void main(String args[]){

        Scanner userInput = new Scanner(System.in);
        ArrayList<String> al = new ArrayList<String>();


        while(userInput.hasNext()){
            al.add(userInput.next());
            System.out.println(userInput.next());
        }


    }
}
4

6 回答 6

9
while(userInput.hasNext()){
    al.add(userInput.next());   //Adding userInput call to ArrayList
    System.out.println(userInput.next());  //Printing another userInput call
}

没有打印存储在 ArrayList 中的值,但实际上是对 userInput.next() 的另一个调用

修订

@Sheldon这对我有用

public static void main(String[] args) {
    Scanner userInput = new Scanner(System.in);
    ArrayList<String> al = new ArrayList<String>();
    while(userInput.hasNext()){
        al.add(userInput.next());
        System.out.println(al);  //LINE CHANGED FROM YOUR QUESTION
    }

}

我用输入测试了你的代码 1 2 3 4 5 6 7 8 9 0

然后我按回车并得到:

2 4 6 8 0

userInput.next() 在添加到 ArrayList 的那个和你的 System.out.println 捕获的那个之间交替

于 2012-09-23T18:12:13.590 回答
5

因为next()消耗了扫描仪的下一个令牌。因此,当您有:

        al.add(userInput.next());
        System.out.println(userInput.next());

您实际上正在使用扫描仪中的两个令牌。第一个被添加到 中ArrayList另一个被打印到System.out. 一种可能的解决方案是将令牌存储在局部变量中,然后将其添加到数组中并打印:

    while (userInput.hasNext()) {
        String token = userInput.next();
        al.add(token);
        System.out.println(token);
    }
于 2012-09-23T18:15:18.563 回答
2

我会这样写:

import java.util.*;


public class Kwic {
    public static void main(String args[]){

        Scanner userInput = new Scanner(System.in);
        List<String> al = new ArrayList<String>();


        while(userInput.hasNext()){
                al.add(userInput.next());
        }
    System.out.println(al);

    }
}
于 2012-09-23T18:13:38.430 回答
1

将所有值存储到第一个值中ArrayList然后将它们打印出来对您来说会更有益。你现在正在做的是打印另一个调用userInput.next(),它可能存在也可能不存在。

while(userInput.hasNext()){
    al.add(userInput.next());
}

for(String s : al) {
    System.out.println(s);
}
于 2012-09-23T18:14:00.890 回答
0
al.add(userInput.next());   //Adding an Item call to ArrayList

System.out.println(userInput.next()); //Printing the next userInput with a call**

试试这个来打印 ArrayList 中的值

for(String s : al){

     System.out.println(s);

 }
于 2012-09-23T18:15:22.003 回答
0

不仅您没有打印该行中的所有单词,您也没有将所有单词添加到ArrayList. 因为您编码的方式,它将每个替换词添加到ArrayList并打印替换词。

于 2012-09-23T18:19:43.877 回答