扫描仪和循环

时间:2014-05-09 06:05:44

标签: java vector

我正在处理一段代码而我正在尝试初始化一个向量。但是,代码以某种方式跳过了第一个并初始化了一个空白到我的向量。谁知道为什么?这是我的代码片段:

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]。为什么第一个元素有空白?

2 个答案:

答案 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);