为什么Java不打印行中的所有单词(当单词被添加到ArrayList时)?

时间:2012-09-23 18:10:49

标签: java arraylist println

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

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());
        }


    }
}

6 个答案:

答案 0 :(得分: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捕获的那个之间交替

答案 1 :(得分:5)

因为next()会使用扫描程序中的 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);
    }

答案 2 :(得分: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);

    }
}

答案 3 :(得分:1)

首先将所有值存储到ArrayList然后将它们打印出来会更有益。你现在正在做的是打印另一个userInput.next()来电,这可能会或可能不会出现。

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

for(String s : al) {
    System.out.println(s);
}

答案 4 :(得分: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);

 }

答案 5 :(得分:0)

您不仅不打印该行中的所有字词,而且还没有将所有字词添加到ArrayList中。由于您编码的方式,它会将每个替代词添加到ArrayList并打印替代词。