Java 循环中的BufferedReader错误
这个循环第一次迭代时效果很好,但在我按下字符“y”以重复之后,下次显示时,它将不允许我输入其他名称。我不知道是什么原因导致了这种情况,但当需要清除输入缓冲区时,它让我想起了C 任何帮助都将不胜感激Java 循环中的BufferedReader错误,java,input,console,buffered,Java,Input,Console,Buffered,这个循环第一次迭代时效果很好,但在我按下字符“y”以重复之后,下次显示时,它将不允许我输入其他名称。我不知道是什么原因导致了这种情况,但当需要清除输入缓冲区时,它让我想起了C 任何帮助都将不胜感激 byte counter = 1; boolean myCondition = false; List<String> myList = new ArrayList(); BufferedReader objReader = new BufferedReader(new InputStre
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);
字节计数器=1;
布尔myCondition=false;
List myList=new ArrayList();
BufferedReader objReader=新的BufferedReader(新的InputStreamReader(System.in));
做{
System.out.println(“输入#“+计数器+”人名:”;
//低质量验证
String dude=objReader.readLine();
while(myList.contains(dude)){
System.out.println(“伙计,这个家伙:+dude+”已经加载到列表中了!请选择另一个名称:\n”);
dude=objReader.readLine();
}
我的列表。添加(都德);
计数器++;
System.out.println(“是否要在列表中添加其他名称?是/否”);
char myChar=(char)System.in.read();
如果(myChar=='y'| | myChar=='y')
myCondition=true;
其他的
真菌病=假;
}while(myCondition);
尝试移动BufferedReader objReader=新的BufferedReader(新的InputStreamReader(System.in))代码>在do/while循环中。这样,每次都应该重新初始化它。查看您的代码:
你读的是“y”字
char myChar=(char)System.in.read()代码>等待,直到按下Enter
myChar现在是“y”。这将在缓冲区中保留“\n”('Enter')
下一步String dude=objReader.readLine()代码>读取缓冲区中已存在的以“\n”结尾的行
你应该读整行而不是简单的read()
如果希望y的分辨率更好,请执行以下操作:
String line = objReader.readLine();
myCondition = line.startsWith("Y") || line.startsWith("y");
试试这个
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;
使用扫描器和其他一些小的代码更改可以很好地工作
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);
字节计数器=1;
布尔myCondition=false;
扫描仪扫描=新扫描仪(System.in);
List myList=new ArrayList();
做{
System.out.println(“输入#“+计数器+”人名:”;
//低质量验证
String dude=scan.nextLine();
while(myList.contains(dude)){
System.out.println(“伙计,这个家伙:+dude+”已经加载到列表中了!请选择另一个名称:\n”);
}
我的列表。添加(都德);
计数器++;
System.out.println(“是否要在列表中添加其他名称?是/否”);
字符串选择=scan.nextLine();
if(选择相等信号情况(“Y”)){
myCondition=true;
}否则{
真菌病=假;
}
}while(myCondition);
在我退出程序之前,我运行了它,总共输入了七个名字。似乎确实是你的问题。我认为使用Scanner
会让一切变得更容易。对不起,我只是在学习,但我认为Scanner是用来读取文件而不是控制台输入的。我错了吗?我想使用最好的方法。Scanner用于读取输入流,其中包括标准输入。我尝试使用Scanner,它做了相同的事情:SY您的问题是您通过BufferedReader(缓冲区)和System.in(缓冲区)混合输入,而System.in正是BufferedReader试图缓冲的。不要那样做,它不起作用。由@Jeremy Heiler删除的答案可能会导致一个答案,也许不会立即,或者像一些海报所建议的那样,通过一个单独的东西,比如扫描仪来完成。很有趣,但当我这样做时:char myChar=(char)objReader.readLine();它不允许我将字符串强制转换为char。我想我将不得不告别char变量,转而使用字符串。我想使用单个字符,但我不知道如何使用。如果您确定缓冲区中始终有1个字符后跟“\n”,请使用:String line=objReader.readLine();char myChar=line.charAt(0);