繁体   English   中英

在Java循环中执行

[英]do while loop Java

因此,我几乎是编码的新手,并且忙于“ do while循环”,我的代码可能很糟糕,很可能有1000多种更好的方式来做我想做的事情,无论如何。

我正在尝试使用main方法,然后再使用另外两种方法(出于练习目的)要求用户选择1到10之间的数字,然后他们是否要再次尝试。

我让代码运行起来,直到要求用户输入是/否,然后代码停止运行,我才知道为什么?

public static void main(String[] args) {
    chooseNum();

}

public static boolean chooseNum() {
    int number = 4;
    do {
        System.out.println("Enter a number 1 to 10");
        int userNum = in.nextInt();
        if (number == userNum) {
            System.out.println("You chose the correct number!");
            return tryAgain();
        } else if (number != userNum) {
            System.out.println("You chose the incorrect number!");
            return tryAgain();
        } else
            System.out.println("invalid Response");
    }
    while (false);
    return false;
}

public static boolean tryAgain(){

        System.out.println("Try again? yes/no");
        String response = in.nextLine();
        if (response.equalsIgnoreCase("yes")){
            return chooseNum();
        }else if (response.equalsIgnoreCase("no")){
            return false;
    }else
        return false;
    }
}

和我的输出如下:

Enter a number 1 to 10
1
You chose the incorrect number!
Try again? yes/no

Process finished with exit code 0

为了让我输入是或否,我似乎无法进一步了解它。

我知道这是基本的操作,很可能看起来很可悲,但任何帮助都会受到赞赏。

也许另一个菜鸟可以得到帮助别人的机会:)

非常感谢!

您可以通过在方法内部创建一个新的扫描程序实例来避免nextLine错误。 我通过在choiceNum和tryAgain中声明一个新的Scanner对您的代码进行了编辑,这可以避免由于缓冲输入而导致的问题。 我希望这有帮助。

import java.util.Scanner;

public class dowhile {
    public static void main(String[] args) {
        chooseNum();
    }

    public static boolean chooseNum() {
        Scanner in = new Scanner(System.in);
        int number = 4;
        do {
            System.out.println("Enter a number 1 to 10");
            int userNum = in.nextInt();
            if (number == userNum) {
                System.out.println("You chose the correct number!");
                return tryAgain();
            } else if (number != userNum) {
                System.out.println("You chose the incorrect number!");
                return tryAgain();
            } else
                System.out.println("invalid Response");
        }
        while (false);
        return false;
    }

    public static boolean tryAgain(){
        Scanner in = new Scanner(System.in);
        System.out.println("Try again? yes/no");
        String response = in.nextLine();
        if (response.equalsIgnoreCase("yes")){
            return chooseNum();
        }else if (response.equalsIgnoreCase("no")){
            return false;
        }else
            return false;
    }
}

执行该行时, return tryAgain(); chooseNum()方法结束。 那是return语句的结果。

使用next()而不是nextLine()因为当您读取int并添加\\n来提交值时。 扫描程序将此作为输入。 next()应该忽略先前输入的\\n并且将按照您的期望进行输入。

啊,“ nextLine”陷阱...

输入1时,STDIN包含1\\n\\r 当您调用nextInt()时,它将在STDIN流中弹出1,留下\\n\\r 现在,当它调用nextLine()获取下一个输入时,它会读取下一个\\n\\r ,并返回一个空字符串,因为\\n\\r仍然污染了IN流。 如果改用next(),它将忽略\\n\\r (和任何其他空格),并为您提供STDIN中的下一个单词。 (您也可以只调用两次nextLine()从nextInt调用中清除\\n\\r

这是为此使用do-while的正确方法。

public static void main(String[] args) {
    chooseNum();
}

public static void chooseNum() {
    int number = 4;
    do {
        System.out.println("Enter a number 1 to 10");
        int userNum = in.nextInt();
        if (number == userNum) {
            System.out.println("You chose the correct number!");
        } else if (number != userNum) {
            System.out.println("You chose the incorrect number!");
        } else
            System.out.println("invalid Response");
    }
    while (tryAgain());
}

public static boolean tryAgain(){
    do {
        System.out.println("Try again? yes/no");
        String response = in.nextLine();
        if (response.equalsIgnoreCase("yes")){
            return true;
        }else if (response.equalsIgnoreCase("no")){
            return false;
        }else
            System.out.println("Invalid response.");
        }
    } while(true);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM