使用Buffered Reader读取输入的语句未执行

时间:2015-01-13 10:28:17

标签: java

public void readList() throws IOException{

    char ch = 'N';
    String entry;
    System.out.println("__Enter entries for grocery list one__");
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    do{
        System.out.println("Enter Grocery Item..!!");
        entry = reader.readLine();
        this.l1.add(entry);
        System.out.println("Do you want to continue..!!(Y or N)");
        ch = (char)reader.read();
    }while(ch == 'Y' || ch == 'y');
}

在此对象中,l1的类型为LinkedList<String>。在do-while循环的第一次迭代中,一切运行正常,但在第一次迭代之后:

entry = reader.readLine();
this.l1.add(entry);

被跳过,System.out.println("Do you want to continue..!!(Y or N)")System.out.println("Enter Grocery Item..!!")正在执行。

3 个答案:

答案 0 :(得分:2)

使用ch = reader.readLine().charAt(0);

正如你只做一个reader.read()它返回一个整数,但字符串仍保留在读取器流中,这将在下一个reader.readLine()调用中自动使用,因此对我们来说看起来编译器没有停止那条线,但在内部它得到了它想要的整条线

希望这有帮助!

祝你好运!

答案 1 :(得分:1)

你的read()只能读取一个字符而且我打算在输入该字符后点击<enter>,所以当你执行readLine()时,它会读取该行的其余部分为空。

我建议您使用其他格式,例如

while(true) {
    System.out.println("Enter Grocery Item.. (leave the line empty when done)");
    String entry = reader.readLine();
    if (entry == null || entry.isEmpty())
        break;
    this.l1.add(entry);
}

答案 2 :(得分:0)

read()方法中,单个字符读取为0到65535范围内的整数,然后按Enter键,使readLine()为空行。你应该尝试

do{
    System.out.println("Enter Grocery Item..!!");
    entry = reader.readLine();
    this.l1.add(entry);
    System.out.println("Do you want to continue..!!(Y or N)");
    entry= reader.readLine();
}while(entry.equalsIgnoreCase("Y"));