这是我的代码......
class info{
public static void main (String[]args) throws IOException{
char gen;
while(true) { //problem occurs with this while
System.out.print("\nENTER YOUR GENDER (M/F) : ");
gen=(char)System.in.read();
if(gen=='M' || gen=='F' || gen=='m' || gen=='f'){
break;
}
}
System.out.println("\nGENDER = "+gen);
}
}
这是我的输出......
ENTER YOUR GENDER (M/F) : h
ENTER YOUR GENDER (M/F) :
ENTER YOUR GENDER (M/F) :
ENTER YOUR GENDER (M/F) : m
GENDER = m
有人可以帮助我理解为什么这么多次要求性别。
答案 0 :(得分:5)
你可能在Windows上工作。当您给出答案并按Enter键时,会添加两个额外字符'\r'
和'\n'
。从stdin
开始,您只收到一个字符,但额外的两个字符仍保留在缓冲区中。当你给出错误答案时,你循环并自动从缓冲区中读取这两个字符。它们与性别不匹配,因此循环继续。最好的解决方案是分析字符串而不是字符:
InputStreamReader converter = new InputStreamReader(System.in);
BufferedReader in = new BufferedReader(converter);
String s = in.readLine();
请记住在字符串比较中使用equals
方法而不是==
。
答案 1 :(得分:4)
按h
后按下了返回;在你这样做之前你不会看 'h'
,但是你仍然会看到回归(从它的外观来看,它会以两个字符出现,可能是{{ 1}}和'\r'
)在看到下一个字符之前。
您可能希望一次只读取行文本而不是单个字符 - 当用户按下返回时您只会看到输入,这意味着您不会需要担心这个特殊方面。
您可以使用'\n'
或Scanner
包裹BufferedReader
。
答案 2 :(得分:0)
使用Scanner scan = new Scanner(System.in)
以下是您的代码的工作版本....
public class Info{
public static void main (String[]args) throws IOException{
char gen;
Scanner scan = new Scanner(System.in); // Change made here
while(true) {
System.out.print("\nENTER YOUR GENDER (M/F) : ");
gen= scan.next().charAt(0); // Change made here
if(gen=='M' || gen=='F' || gen=='m' || gen=='f'){
break;
}
else{ // Change made here
System.out.println();
System.out.println("Your Option is not Available, pls try again");
continue;
}
}
System.out.println("\nGENDER = "+gen);
}
}