Java方法示例说明

时间:2018-09-29 02:24:32

标签: java

如果这个问题过分简单,我深表歉意,但我仍处于学习Java的早期阶段。我有一个示例程序,该程序调用了类中的其他方法,但是我并没有完全遵循其中的一些元素-希望有人可以澄清。这是一个简单的随机数猜测游戏,它可以正常工作,但我想更好地了解一些组件。具体来说:

  • 有一个布尔变量(validInput)已声明,但似乎从未在方法中的任何地方使用
  • 有2种方法(askForAnotherRound和getGuess)带有'while'循环,只是将'true'作为变量(?)-即“ while(true)”。

此代码直接来自书中的示例,并且再次起作用。我只是想更好地理解上面的两个元素。 (我认为有效输入变量没有用,因为当我“注释”该行仍在执行时)。不过,我对“ while(true)”元素感到好奇。在askForAnotherRound中,有一个选项可以设置为将返回值设置为false(结束程序)。布尔方法在首次执行/调用时是否默认为“ true”?

再次...对于这里的大多数人来说,了解这可能是一个非常简单的问题,但是作为一个新手,我只是想尽我所能来理解这个问题...

谢谢!

// Replicates the number guessing game using 4 separate methods.

import java.util.Scanner;

public class GuessingGameMethod2
{
    static Scanner sc = new Scanner(System.in);
    public static void main(String[] args)
    {
        System.out.println("Let's play a guessing game!");
        do
        {
            playARound();
        }while (askForAnotherRound());
        System.out.println("Thanks for playing!");
    }

    public static void playARound()
    {
        boolean validInput;
        int number, guess;
        String answer;

        //Pick a Random Number
        number = getRandomNumber();

        //Get a guess
        System.out.println("\nI'm thinking of a number between 1 and 10.");
        System.out.print("What do you think it is? ");
        guess = getGuess();

        //Check the guess
        if (guess == number)
            System.out.println("You're right!");
        else
            System.out.println("You're wrong! The number was " + number + ".");
    }

    public static int getRandomNumber()
    {
        return (int)(Math.random() * 10) + 1;
    }

    public static int getGuess()
    {
        while (true)
        {
            int guess = sc.nextInt();
            if (guess < 1 || guess > 10)
            {
                System.out.print("I said, between 1 and 10. Try again");
            }
            else
                return guess;
        }
    }

    public static boolean askForAnotherRound()
    {
        while (true)
        {
            String answer;
            System.out.print("\nPlay again? Y or N: ");
            answer = sc.next();
            if (answer.equalsIgnoreCase("Y"))
                return true;
            else if (answer.equalsIgnoreCase("N"))
                return false;
        }
    }
}

4 个答案:

答案 0 :(得分:1)

如我所见,您对validInput绝对是正确的-未使用它。可能会在以下各章中使用。

关于askForAnotherRound()-不,默认情况下,布尔方法不会评估为true。更重要的是,如果Java编译器找到不返回值的方法并在某些情况下完成执行,则会引发错误。

while(true)-它是无限循环,因此它将执行直到某些指令中断循环,通常是return语句。

askForAnotherRound()执行以下操作:  -询问用户是否要再次玩  -如果用户输入“ Y”,则返回true  -如果用户输入“ Y”,则返回false  -在其他所有情况下(又无法完成执行)等等再次询问。

希望会有所帮助

答案 1 :(得分:1)

validInput确实毫无价值。

需要无限循环才能从控制台读取以获取有效输入。例如

while (true)
//start infinite loop
        {
            int guess = sc.nextInt();
            if (guess < 1 || guess > 10)
            {
            //continue the loop the input is not between 1-10
                System.out.print("I said, between 1 and 10. Try again");
            }
            else
                //break out of infinite loop, valid int
                return guess;
        }

如果我们采用不带无限循环的方法,并且我建议尝试这种方法,即使它无效,它也将简单地返回读取的值。

例如。

 return sc.nextInt();

将允许返回任何int值,如果我们在当前隐含范围之外返回了任何内容,它将再次循环,直到您输入1-10之间的值为止。

对于下一轮的询问也是如此,它会一直循环直到给出 valid 输入。

我敢打赌,下一个练习将使用validInput var,因为这两种方法都会循环,直到给出有效输入为止。

答案 2 :(得分:1)

您对有效输入是正确的。不使用。可能在代码更改后错过了。应该删除。

while(true)-true不是变量,而是布尔常量。在这种情况下,除非有人杀死程序,否则它将基本上使程序永远运行。另一个选择是在某些情况下使用break退出循环。

答案 3 :(得分:1)

我也没有使用boolean validInput。但是,如果要在某个地方使用它,则可能是检查您猜是否满足1 <= guess <= 10

当涉及askForAnotherRoundgetGuess时,您应该了解以下内容:

while(true)始终被执行。摆脱while循环的一种方法是,如果使用break语句,或者如果循环在函数中,则可以return进行操作。方法askForAnotherRound()将始终返回truefalse。根据返回的askForAnotherRound()值,您是否可以玩另一回合。请注意,当您拥有

    `do{
    ...    
    someActions()
    ...
    }while(booleanValue)`

someActions()将至少执行一次,然后检查booleanValue的值,如果结果为false,您将退出do/while循环。布尔方法没有默认值,您必须为其赋予一个值。

希望这会有所帮助!我现在也正在学习Java,祝您好运!