Java “有麻烦”;“边做边做”;

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

此程序需要用户输入一个大写字母。输入保存在char变量c中,之后转换为ascii,然后检查它是否真的是大写字母。否则,程序应再次询问。问题是,命令System.out.println(“Write capital letter:”)执行了多次,看起来如下所示:

大写字母: 大写字母: 大写字母: 大写字母: 大写字母:

每次输入错误后,我只想在屏幕上显示一个“写大写字母”,并且需要使用ascii表完成

提前谢谢

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...
}