Java while循环默认执行三个迭代

时间:2018-09-08 17:47:33

标签: java while-loop

我开始学习Java并尝试了while循环,我编写了一个简单的程序作为简单的猜谜游戏,用户尝试猜测A和Z之间的字母,并且计算机将打印“正确”并重复执行猜到的字母是错误的,但是,每次我尝试运行它时,默认情况下输出是三个迭代,我试图将while循环更改为do-while并获得相同的输出,我什至添加了int变量{{1} }作为计数器,以查看其是否确实进行了3次迭代,并且i的值始终为4(当我输入正确答案时,实际上应该为1加1的3次错误迭代)。

你能告诉我我在做什么错吗?

i

3 个答案:

答案 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”,您也将退出循环。