我开始学习Java并尝试了while循环,我编写了一个简单的程序作为简单的猜谜游戏,用户尝试猜测A和Z之间的字母,并且计算机将打印“正确”并重复执行猜到的字母是错误的,但是,每次我尝试运行它时,默认情况下输出是三个迭代,我试图将while循环更改为do-while并获得相同的输出,我什至添加了int变量{{1} }作为计数器,以查看其是否确实进行了3次迭代,并且i
的值始终为4(当我输入正确答案时,实际上应该为1加1的3次错误迭代)。
你能告诉我我在做什么错吗?
i
答案 0 :(得分:0)
这是它的外观。 您的代码只是错过了else块,当用户猜测正确的字符时,这对于打破循环是非常必要的。我已经添加了一个。
class guess {
public static void main (String[] args) throws java.io.IOException {
char answer = 'K', ignore,ch='a';
int i=0;
while (ch != answer) {
System.out.println("I am Thinking of a letter between A and Z, can you guess it?");
ch = (char) System.in.read();
i++;
if (ch !=answer) {
System.out.println("Wrong ! please try again");
}
else{
System.out.println("Correct!, you guessed after "+i+" attempts");
break;
}
}
}
}
答案 1 :(得分:0)
问题是,当您在控制台中键入字符后按 Enter 时,对于输入的字符,循环将执行一次,对于换行符10
,循环将再次执行。
因此,我刚刚编辑了您的代码以跳过新行并等待输入下一个字符,并且还将初始提示移到了循环之外。我希望这段代码可以解决您的问题:
public static void main(String[] args) throws IOException {
char answer = 'K', ignore, ch = 'a';
int i = 0;
System.out.println("I am Thinking of a letter between A and Z, can you guess it?");
while (ch != 'K') {
ch = (char) System.in.read();
if(!Character.isLetter(ch)){
continue;
}
System.out.println("Wrong ! please try again");
i++;
}
System.out.println("Correct!, you guessed after " + i + " attempts");
}
答案 2 :(得分:-1)
你好,我给你个小费。 我个人将使用Scanner而不是System.in.read。扫描仪是读取输入的对象。
要创建一个,只需将其倾斜:
Scanner sc = new Scanner(System.in); //System.in referes to a console input
要知道用户键入的内容,请使用sc.nextLine();
,正如我所说的,它返回输入。但是,它返回一个String而不是一个char。因此,在这种情况下,您还需要更改“ ch”的类型。
要将答案与输入进行比较,您将需要使用方法equals()
。基本上,如果两个相同,则返回true。
也就是说,您的代码应如下所示:
Scanner sc = new Scanner(System.in);
String answer = "K",ch;
int i=0;
boolean correct = false;
while (!correct) {
System.out.println("I am Thinking of a letter between A and Z, can you guess it?");
ch = sc.nextLine();
i++;
if (!ch.toUpperCase().equals(answer)) { // or ch.equals(answer) == false
System.out.println("Wrong ! please try again");
}else{ //if they are the same
correct = true; //the answer is correct so you can leave the while loop
System.out.println("Correct!, you guessed after "+i+" attempts");
}
}
sc.close(); //you should always close a scanner after you use it, but you can ignore this step for now
请注意,我还使用了一种称为toUpperCase()
的方法。该方法将字符串的所有字符转换为大写,因此,即使您键入“ k”而不是“ K”,您也将退出循环。