我想要使用此功能编写程序: 用户将输入他有多少东西。他将输入这些东西,并将东西添加到列表中。 我做了这个代码:
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]
我想知道为什么列表中的第一个字符串是空的,它让我输入更少的东西。谢谢你的帮助。
答案 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);
}
}
官方文件中描述的
使此扫描程序超过当前行并返回该输入 被跳过。此方法返回当前行的其余部分, 排除末尾的任何行分隔符。该职位设定为 下一行的开头。
调用nextInt()
后,它无法正确终止分配的内存行。因此,当第一次调用nextLine()
时,它实际上终止了实际上具有值的前一行 - 通过nextInt()
输入而不是接受新的String
值。这就是为什么{ {1}}的索引String
的{1}}为空。因此,为了继续读取输入的值而不是前一个空白行(因为0
返回的值没有终止),您可以使用Scanner.next()
根据官方文档声明:< / p>
从此扫描仪中查找并返回下一个完整令牌。
答案 1 :(得分:0)
问题是input.nextInt()
不使用尾随换行符,因此第一个input.nextLine()
返回一个空字符串。
有几种方法可以解决这个问题。我会把它留作练习来弄清楚如何最好地做到这一点。