【问题标题】:Java Number-Guessing Game IssueJava 猜数字游戏问题
【发布时间】:2014-10-04 15:04:06
【问题描述】:

我正在尝试用 Java 构建一个数字猜谜游戏,它与通常的猜数字游戏不同,程序会告诉你它是高还是低。我正在尝试构建一个程序猜测数字并且你说它是高还是低,直到程序找到你选择的数字。

我在“if”语句中遇到问题,程序猜测的数字太低。

具体问题在这里:

if (hilow.equals("l"))
        {
            middle = middle * 2;
            System.out.println(middle);
            numbGuesses++;
        }

到目前为止的整个程序如下:

import java.util.*;

public class NumbGuess
{
    public static void main(String args[])
    {
        int numbGuesses = 0;
        boolean win = false;
        int hi = 1000000;
        int low = 0;
        Scanner input = new Scanner(System.in);
        int middle = hi / 2;
        System.out.println(middle);


    while (win == false)
    {
        String hilow = input.nextLine();

        if (hilow.equals("h"))
        {
            middle = middle / 2;
            System.out.println(middle);
            numbGuesses++;
        }

        if (hilow.equals("l"))
        {
            middle = middle * 2;
            System.out.println(middle);
            numbGuesses++;
        }

        if (hilow.equals("y"))
        {
            win = true;
            System.out.println("It took: " + numbGuesses + " guesses");
        }
    }
}
}

我遇到的问题是,只要数字太低,就会出现永久循环:

我想我需要改变中间的操作以获得工作结果。

【问题讨论】:

    标签: java loops


    【解决方案1】:

    你的逻辑有问题。当数字太低时,你不应该只乘以 2,当它太大时,你不应该只除以 2。

    新的猜测应该在范围的中间。如果你的第一个猜测是 500000,而用户说它太低了,那么这个数字在 500000 和最大数字 (1000000) 之间,那么新的猜测应该是 (1000000-500000)/2=750000,而不是 500000*2。如果第一次猜测太高,数字在最小数(0)和500000之间,所以下一次猜测应该是(500000-0)/2=250000

    【讨论】:

    • 好的,谢谢。我是新手,这是我的小宠物项目。您的回复很有帮助。
    【解决方案2】:

    您的问题在于if 语句的高和低。每次进行猜测时都需要调整界限,例如,如果猜测太高,则需要将新的high 界限设置为猜测。同样,如果猜测值太低,则需要将新的low 绑定设置为猜测值。

    【讨论】:

      【解决方案3】:

      问题不是永久循环。该程序正在执行您的要求:

      它说 500000,你说它除以 2 (=250000)。然后,你说它乘以 2 (=500000)。到目前为止...

      问题在于你的逻辑。当程序收到信息时,您应该正确建立限制(hilow)。例如,如果程序猜测 500000,而您说它太高,那么现在您的限制在 1 到 499999 (=500000-1) 之间。如果它太低,那么现在您的限制在 500001 (=500000+1) 和 1000000 之间。每次猜测,您都使用 hilow ((hi+low)/2) 重新计算 middle

      希望对您有所帮助。

      【讨论】:

        【解决方案4】:

        您用来改变计算机猜测的逻辑并不完全正确。您想要做的(以及看起来您正在尝试做的事情)是二分搜索

        在你的例子中,50000 太高了,25000 太低了,所以下一个猜测不应该是 25000 的两倍,它应该在 50000 和 25000 的中间,或者类似 37500。

        一般来说,您应该跟踪“过低的最低猜测”和“过低的最高猜测”,下一个猜测应该介于两者之间。

        【讨论】:

          【解决方案5】:

          您应该动态地更改 hilow,而不是让它们保持静态。根据用户的反应,程序应该改变 hilow 的值,并将其替换为当前的 middle 分别递减或递增,并且然后通过平均新的 hilow 来设置新的 middle

          这是我尝试过的,它似乎有效:

          import java.util.*;
          
          public class NumbGuess
          {
              public static void main(String args[])
              {
                  int numbGuesses = 0;
                  boolean win = false;
                  int hi = 1000000;
                  int low = 0;
                  Scanner input = new Scanner(System.in);
                  int middle = hi / 2;
                  System.out.println(middle);
          
          
              while (win == false)
              {
                  String hilow = input.nextLine();
          
                  if (hilow.equals("h"))
                  {
                      hi = middle - 1;
                      middle = (low + hi) / 2;
          
                      System.out.println(middle);
                      numbGuesses++;
                  }
          
                  if (hilow.equals("l"))
                  {
                      low = middle + 1;
                      middle = (low + hi) / 2;
          
                      System.out.println(middle);
                      numbGuesses++;
                  }
          
                  if (hilow.equals("y"))
                  {
                      win = true;
                      System.out.println("It took: " + numbGuesses + " guesses");
                  }
              }
          }
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-05-29
            • 1970-01-01
            • 1970-01-01
            • 2018-09-21
            • 2020-11-22
            • 1970-01-01
            • 2021-11-20
            • 2013-10-20
            相关资源
            最近更新 更多