我正在处理一段代码而我正在尝试初始化一个向量。但是,代码以某种方式跳过了第一个并初始化了一个空白到我的向量。谁知道为什么?这是我的代码片段:
public class Test{
private Vector<String> vecStr;
public void run(){
vecStr = new Vector<String>();
System.out.println("How many strings do you want for your string vector?");
int numStr = keyboard.nextInt();
System.out.println("Enter your string values.");
for (int i=0;i<numStr;i++){
System.out.println(i + "Input");
vecStr.add(keyboard.nextLine());}
}
}
}
让我说我输入4,不知何故,代码给了我:
0
1
input:
2
input:
3
input:
它跳过了0。有人可以告诉我为什么会这样吗?如果我要显示Vector,它会给我:[ , blah, blah, blah]
。为什么第一个元素有空白?
答案 0 :(得分:2)
扫描仪不是以线为基础工作,而是以令牌为基础。因此,在您的第一个nextInt()
(对于numStr)之后,扫描仪的光标停留在输入行的末尾(不是下一行的开头)。因此,在此之后立即执行nextLine()
会导致空字符串。对nextLine()
的后续调用可以正常工作。
答案 1 :(得分:1)
您可以使用输入流阅读器:
Vector<String> vecStr = new Vector<String>();
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.println("How many strings do you want for your string vector?");
int numStr = Integer.parseInt(reader.readLine());
System.out.println("Enter your string values:");
for (int i=0;i<numStr;i++){
System.out.println(i + " Input: ");
vecStr.add(reader.readLine());
}
System.out.println("vector contains:");
System.out.println(vecStr);