如果这个问题过分简单,我深表歉意,但我仍处于学习Java的早期阶段。我有一个示例程序,该程序调用了类中的其他方法,但是我并没有完全遵循其中的一些元素-希望有人可以澄清。这是一个简单的随机数猜测游戏,它可以正常工作,但我想更好地了解一些组件。具体来说:
此代码直接来自书中的示例,并且再次起作用。我只是想更好地理解上面的两个元素。 (我认为有效输入变量没有用,因为当我“注释”该行仍在执行时)。不过,我对“ 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;
}
}
}
答案 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
。
当涉及askForAnotherRound
和getGuess
时,您应该了解以下内容:
while(true)
始终被执行。摆脱while
循环的一种方法是,如果使用break
语句,或者如果循环在函数中,则可以return
进行操作。方法askForAnotherRound()
将始终返回true
或false
。根据返回的askForAnotherRound()
值,您是否可以玩另一回合。请注意,当您拥有
`do{
...
someActions()
...
}while(booleanValue)`
someActions()
将至少执行一次,然后检查booleanValue
的值,如果结果为false
,您将退出do/while
循环。布尔方法没有默认值,您必须为其赋予一个值。
希望这会有所帮助!我现在也正在学习Java,祝您好运!