2012-05-16 62 views
0

第一次循环迭代很好,但在按下字符'y'以便重复时,下次显示时,它不会让我输入另一个名称。我不知道可能是什么原因造成的,但是当你需要清除输入缓冲区时,它让我想起了C语言。循环中的BufferedReader错误

任何帮助肯定会受到赞赏。

byte counter = 1; 
boolean myCondition = false; 
List<String> myList = new ArrayList(); 
BufferedReader objReader = new BufferedReader(new InputStreamReader(System.in)); 

do{ 
    System.out.println("Enter the #" +counter +" person's name:"); 
    // low quality validation 
    String dude = objReader.readLine(); 

    while (myList.contains(dude)){ 
     System.out.println("Man, this dude:" +dude +" is already loaded into the List! Pick another name:\n"); 
     dude = objReader.readLine();    
    } 

    myList.add(dude); 
    counter++; 
    System.out.println("Would you like to add another name to the list? yes/no"); 

    char myChar = (char) System.in.read(); 

    if (myChar == 'y' || myChar == 'Y') 
     myCondition = true; 
    else 
     myCondition = false; 

    } while (myCondition); 
+0

似乎确实像你的问题。我认为使用'扫描仪'将使这一切变得更容易。 – MByD

+0

对不起,我只是在学习,但我认为Scanner只是为了读取文件而不是控制台输入。我错了吗?我想用最好的方法。 – Cristian

+0

扫描仪用于读取包含标准输入的输入流。 – MByD

回答

2

看看你的代码:

  1. 你读字符 'Y'
  2. char myChar = (char) System.in.read();等待,直到你按下Enter
  3. myChar现在是 'Y'。这会在缓冲区中留下'\ n'('Enter')
  4. Next String dude = objReader.readLine();以'\ n'结尾的行已经存在于缓冲区中。

你应该读整条生产线,而不是简单的read()

如果你想要更好的Y分辨率:

String line = objReader.readLine(); 
myCondition = line.startsWith("Y") || line.startsWith("y"); 
+0

有趣,但当我这样做:char myChar =(char)objReader.readLine();它不会让我把字符串转换为字符。 – Cristian

+0

我想我必须对我的char变量说再见,并使用String来代替。我想用一个字符,但我不知道该怎么做。 – Cristian

+0

String.charAt(0)... – zeller

0

尝试在do/while循环内移动BufferedReader objReader = new BufferedReader(new InputStreamReader(System.in));。应该每次都重新初始化,那样。

+0

这并不适合队友。无论如何,谢谢 – Cristian

0

试试这个,

System.out.println("Would you like to add another name to the list? yes/no"); 
Scanner scan = new Scanner(System.in); 
String myChar = scan.nextLine(); 

if (myChar.equals("y") || myChar.equals("Y")) 
    myCondition = true; 
else 
    myCondition = false; 
+0

谢谢你:) :) – Cristian

+0

所以它工作? –

0

工作正常使用扫描仪和一其他一些小的代码更改。

byte counter = 1; 
      boolean myCondition = false; 
      Scanner scan = new Scanner(System.in); 
      List<String> myList = new ArrayList(); 

      do{ 
        System.out.println("Enter the #" + counter + " person's name:"); 
        // low quality validation 
        String dude = scan.nextLine(); 
        while (myList.contains(dude)) { 
        System.out.println("Man, this dude:" + dude + " is already loaded into the List! Pick another name:\n"); 
        } 
        myList.add(dude); 
        counter++; 
        System.out.println("Would you like to add another name to the list? yes/no"); 
        String choice = scan.nextLine(); 
        if (choice.equalsIgnoreCase("Y")) { 
        myCondition = true; 
        } else { 
        myCondition = false; 
        } 

      } while (myCondition); 

我跑了它,并在我退出程序之前总共输入了七个名字。