Java “有麻烦”;“边做边做”;
此程序需要用户输入一个大写字母。输入保存在char变量c中,之后转换为ascii,然后检查它是否真的是大写字母。否则,程序应再次询问。问题是,命令System.out.println(“Write capital letter:”)执行了多次,看起来如下所示: 大写字母: 大写字母: 大写字母: 大写字母: 大写字母: 每次输入错误后,我只想在屏幕上显示一个“写大写字母”,并且需要使用ascii表完成 提前谢谢Java “有麻烦”;“边做边做”;,java,loops,while-loop,do-while,Java,Loops,While Loop,Do While,此程序需要用户输入一个大写字母。输入保存在char变量c中,之后转换为ascii,然后检查它是否真的是大写字母。否则,程序应再次询问。问题是,命令System.out.println(“Write capital letter:”)执行了多次,看起来如下所示: 大写字母: 大写字母: 大写字母: 大写字母: 大写字母: 每次输入错误后,我只想在屏幕上显示一个“写大写字母”,并且需要使用ascii表完成 提前谢谢 BufferedReader in = new BufferedReader(new
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int ascii;
char c;
do {
System.out.println("Write capital letter: ");
c = (char) System.in.read();
ascii = (int) c;
} while (ascii < 65 || ascii > 90 );
BufferedReader-in=新的BufferedReader(新的InputStreamReader(System.in));
int-ascii;
字符c;
做{
System.out.println(“写大写:”);
c=(char)System.in.read();
ascii=(int)c;
}而(ascii<65 | | ascii>90);
只要条件为真,就会执行
do
块中定义的任何内容。因此,将只想执行一次的语句移出do
块 当您有一个BufferedReader
变量集时,为什么要使用System.in.read()
这会解决你的问题。我正在变量中使用您的BufferedReader
while (true) {
System.out.println("Write capital letter: ");
int b = 0
while ((b = in.read()) != -1){
char c = (char) c;
if (Character.isUpperCase(c)) break;
}
//Carry on...
}
你试过调试这个吗?当while
语句发生时,c
和ascii
有什么值?实际上,在ascii=(int)c之后添加类似System.out.println(ascii)
的内容代码>并查看您得到的值。然后查找包含这些代码的字符。导致多次显示提示的原因是,当您读取一个字节(字符)时,它会留给系统。在
中,您在该行输入的任何其他内容,包括换行符。您不需要整个ascii
变量。OP需要多次提示:“每次输入错误后,我只想在屏幕上显示一个“写大写字母”,需要使用ascii表来完成。问题是为什么它出现的频率比OP预期的要高。我尝试过,但仍然得到多个“写大写字母:”每次输入错误后。@user2993023请改用java.util.Scanner
。
while (true) {
System.out.println("Write capital letter: ");
int b = 0
while ((b = in.read()) != -1){
char c = (char) c;
if (Character.isUpperCase(c)) break;
}
//Carry on...
}