麻烦“做什么”

时间:2013-11-14 17:03:37

标签: java loops while-loop do-while

此程序需要用户输入的大写字母。输入保存在char变量c中,之后转换为ascii,然后检查,如果它确实是大写字母。如果没有,程序应该再问一次。问题是,该命令System.out.println(“写入大写字母:”)被执行多次,看起来像这样:

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

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

提前致谢。

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 );   

2 个答案:

答案 0 :(得分:1)

System.out.println("Write capital letter: ");
do { 
  c = (char) System.in.read();                                              
  // ascii = (int) c;  // not needed if you are using the isUppercase() method          
  if(! Character.isUppercase(c)){
   System.out.println("Write capital letter: ");
  }                                            
} while (! Character.isUppercase(c) );  

只要条件为真,就会执行do块中定义的任何内容。因此,仅在do块之外移动您要执行的语句一次。

答案 1 :(得分:0)

为什么在设置System.in.read()变量时使用BufferedReader

这将解决您的问题。我正在使用您的BufferedReader in变量。

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