为什么这个方法没有执行?

时间:2013-11-25 16:39:02

标签: java methods random

我正在编写一个生成随机数的程序,然后让用户猜出该数字。我有两种方法:

public static void main(String[] args)
{
//Declares methods to be used during process
generateNumber();
playGame();
}

第一种方法generateNumber()执行正常。代码如下所示:

public static void generateNumber()
{
//Generates number and assigns it to the variable "randomNumber"
System.out.println("Generating random number between 0 and 100. Please wait.");
Random rand = new Random();
int randomNumber = rand.nextInt(101) + 1;
System.out.println("Random number generated");
}

然后该过程结束,第二个方法playGame()

public static void playGame()
{  
//Asks for guess of the number. Prints whether the guess is above or below randomNumber.
Scanner reader = new Scanner(System.in);
while(userGuess != randomNumber){
   System.out.println("Guess the number ");
   userGuess = reader.nextInt(); 

  if (userGuess > randomNumber) {
     numberOfGuesses++;
     System.out.println("Incorrect! The number that you guessed is greater than my number!");
  } else {
     numberOfGuesses++;
     System.out.println("Incorrect! The number that you guessed is less than my number!"); 
      }

if(userGuess == randomNumber){
System.out.println("Correct! My number was "+randomNumber+". It took you "+numberOfGuesses+" tries to find my number!");
  }
}
}

格式化可能很糟糕,但我只是将它从JCreator转移过来,这一切都搞砸了。我确信这很简单,但任何帮助都会受到赞赏。

4 个答案:

答案 0 :(得分:1)

您的随机数在一个方法中声明,但在另一个方法中引用。

int randomNumber = rand.nextInt(101) + 1;

您需要在类范围内声明它。

答案 1 :(得分:1)

除了比尔蜥蜴所说的,你似乎没有在任何地方宣布猜测数量,也没有声明userGuess。你必须声明它们,可能是在函数范围内。

答案 2 :(得分:1)

randomNumbergenerateNumber()中的本地变量,您尝试在playGame()中访问它。

您必须使用全局变量,或者更好地将随机数作为参数提供给playGame()

public static int generateNumber()
{
//Generates number and assigns it to the variable "randomNumber"
System.out.println("Generating random number between 0 and 100. Please wait.");
Random rand = new Random();
int randomNumber = rand.nextInt(101) + 1;
System.out.println("Random number generated");
return randomNumber;
}

public static void playGame(int randomNumber)
{
...
}

public static void main(String[] args)
{
//Declares methods to be used during process
int randomNumber = generateNumber();
playGame(randomNumber);
}

更新

打印“正确”和“不正确”的问题在于if陈述的结构

if (userGuess > randomNumber) {
    // incorrect
} else {
    // incorrect
}

if (userGuess == randomNumber) {
    // correct
}

当你有guess == random时,它会进入第二个else中的if部分。要解决此问题,您必须将所有if链接在一起,因此程序将仅选择三个分支中的一个,例如

if (userGuess == randomNumber) {
    // correct
} else if (userGuess > randomNumber) {
    // incorrect
} else {
    // incorrect
}

答案 3 :(得分:0)

您似乎错过了userGuess变量的声明。

编辑:而且,randomNumber变量也未在第二种方法中声明。您应该在类中将其声明为静态字段。

相关问题