【问题标题】:Why is this method not executing? [closed]为什么这个方法没有执行? [关闭]
【发布时间】:2013-11-25 16:39:02
【问题描述】:

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

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 转移过来的,结果一团糟。我确信这是非常简单的事情,但任何帮助表示赞赏。

【问题讨论】:

  • 您的代码无法编译
  • 我该如何解决呢?
  • 这是什么行为?错误是什么?是否没有错误,您预计会发生什么以及您观察到了什么?
  • 读错是第二种方法没有执行
  • 我们可以初始化 int userGuess = -1; ?在while循环之前?

标签: java methods random


【解决方案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 时,它将进入第二个if 中的else 部分。要解决这个问题,您必须将所有ifs 链接在一起,因此程序将只选择三个分支之一,例如

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

【讨论】:

  • 是的!那行得通!谢谢你!此外,每当我运行程序时,即使我得到正确的答案并且它会打印“正确!”行,它说“不正确!”在过程结束之前的行。关于如何解决这个问题的任何想法?
  • 啊,我明白了。这很有意义。非常感谢!
【解决方案2】:

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

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

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

【讨论】:

  • 所以把它移到 main 方法?
  • @user3033159 不,不在 main 方法中。只需在类级别(在任何方法之外)声明变量,然后在generateNumber() 中设置值。
  • 公共静态整数随机数;?因为我是在程序的顶部这样做的,所以我只是没有包含那部分代码
  • @user3033159 它不需要是public,但这应该可以。还要在您的generateNumber 方法中从上面的代码行中删除int,否则它将在本地范围内重新声明变量。
【解决方案3】:

除了 Bill The Lizard 所说的之外,您似乎没有在任何地方声明猜测次数,也没有声明 userGuess。您必须声明它们,可能在函数范围内。

【讨论】:

    【解决方案4】:

    您似乎缺少userGuess 变量的声明。

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

    【讨论】:

    • userGuess = reader.nextInt();
    • 这不是声明,而是定义。应该有“int userGuess;”某处
    • 它在程序顶部定义。我没有展示那部分,对不起。
    • 好的,所以也试着把 randomNumber 放在那里。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多