链接列表中的list.add(String)对我来说无法正常工作

时间:2013-03-23 18:15:09

标签: java string for-loop linked-list

我想要使用此功能编写程序: 用户将输入他有多少东西。他将输入这些东西,并将东西添加到列表中。 我做了这个代码:

public class lists {
public static void main(String[] args){
    Scanner input = new Scanner(System.in);
    LinkedList<String> list= new LinkedList<String>();
    System.out.println("How many things you have?");
    int size=input.nextInt();
    LinkedList<String> list= new LinkedList<String>();
    System.out.println("Enter those things");
    for(int c=1;c<=size;c++) list.add(input.nextLine().toString());     
        System.out.printf("%s",list);

}   

}

例如,数字5的输出如下所示:

[, 1st Inputed, 2nd Inputed,3rd Inputed, 4nd inputed]

我想知道为什么列表中的第一个字符串是空的,它让我输入更少的东西。谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

您的代码应该是这样的:

 public class lists {
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        System.out.println("How many things you have?");
        int size=input.nextInt();
        LinkedList<String> list= new LinkedList<String>();
        System.out.println("Enter those things");
        for(int c=0 ;c < size; c++)
        {
            String s = input.next();//use next() instead of nextLine()
            list.add(s);     
        }
            System.out.printf("%s",list);

       } 
    }
官方文件中描述的

Scanner.nextLine()是:

  

使此扫描程序超过当前行并返回该输入   被跳过。此方法返回当前行的其余部分,   排除末尾的任何行分隔符。该职位设定为   下一行的开头。

调用nextInt()后,它无法正确终止分配的内存行。因此,当第一次调用nextLine()时,它实际上终止了实际上具有值的前一行 - 通过nextInt()输入而不是接受新的String值。这就是为什么{ {1}}的索引String的{​​1}}为空。因此,为了继续读取输入的值而不是前一个空白行(因为0返回的值没有终止),您可以使用Scanner.next()根据官方文档声明:< / p>

  

从此扫描仪中查找并返回下一个完整令牌。

答案 1 :(得分:0)

问题是input.nextInt()不使用尾随换行符,因此第一个input.nextLine()返回一个空字符串。

有几种方法可以解决这个问题。我会把它留作练习来弄清楚如何最好地做到这一点。