【问题标题】:What's wrong with my logic (Java syntax)我的逻辑有什么问题(Java 语法)
【发布时间】:2010-05-06 01:34:39
【问题描述】:

我正在尝试制作一个简单的程序来选择一个随机数并从用户那里获取输入。程序应该告诉用户猜测是热的(-/+ 5 个单位)还是冷的,但我从来没有达到 else 条件。

这是代码部分:

    public static void giveHint (int guess) {
    int min = guess - 5;
    int max = guess + 5;
    if ((guess > min) && (guess < max)) {
        System.out.println("Hot..");
    } else {
        System.out.println("Cold..");
    }
}

【问题讨论】:

  • 永远记住你可以扩展表达式:guess &gt; min ~ guess &gt; (guess - 5) ~ hmm?
  • @soda :如果您发现提到的任何解决方案足以解决您的问题,请接受其中一个作为答案:)

标签: java logic


【解决方案1】:
int min = guess - 5;
int max = guess + 5;

应该是:

int min = actualAnswer - 5;
int max = actualAnswer + 5;

【讨论】:

    【解决方案2】:

    这是你的问题:

    int min = guess - 5;
    int max = guess + 5;
    

    min 总是小于 guessmax 总是大于 guess

    【讨论】:

    • +1 @BalusC :我还要补充一点,为了纠正这个函数的逻辑,giveHint 方法应该接受两个参数:int guessint actual
    • 我发现自己必须声明min 小于guess(和/)或max 大于guess。例如,将guess 视为Integer.MAX_VALUEInteger.MIN_VALUE
    • @Tom: 是的,暂时不要考虑溢出;)
    【解决方案3】:

    您需要传递实际答案,而不仅仅是猜测,因为逻辑无法判断适当的混合/最大值应该是什么:

    public static void giveHint (int guess, int actual) {
        int min = actual - 5;
        int max = actual + 5;
        if ((guess > min) && (guess < max)) {
            System.out.println("Hot..");
        } else {
            System.out.println("Cold..");
        }
    }
    

    【讨论】:

      【解决方案4】:

      minmax 应该使用玩家正在寻找的值(秘密值),而不是玩家提供的值。事实上,minmax 每次玩家猜测时都会发生变化,而您甚至没有使用秘密值。

      【讨论】:

        【解决方案5】:

        您将guess 定义为&gt; min(因为int min = guess - 1)和&lt; max(因为int max = guess + 5)。所以当然第一个条件总是满足的。在定义 minmax 时,您应该使用实际的秘密值。

        【讨论】:

          【解决方案6】:

          您正在根据猜测计算最小值和最大值,因此猜测始终介于最小值和最大值之间,因此 (guess > min) && (guess

          【讨论】:

            【解决方案7】:

            举个例子:

            int guess = 20;
            int min = guess - 5 = 15;
            int max = guess + 5 = 25;
            

            因此

            min < guess < max
            

            为什么?

            因为您将猜测与其自身进行比较!我认为你需要有实际的答案,而不是猜测

            【讨论】:

              【解决方案8】:

              我不能把完整的东西放在评论中,所以你的代码应该是这样的:

                  public static void giveHint (int guess, int actual) {
                  int min = actual - 5;
                  int max = actual + 5;
                  if ((guess > min) && (guess < max)) {
                      System.out.println("Hot..");
                  } else {
                      System.out.println("Cold..");
                  }
              

              【讨论】:

                【解决方案9】:

                另一种解决方案:

                    public static void giveHint (int actual, int guess) {
                         if(Math.abs(actual - guess) <= 5) {
                             System.out.println("Hot");
                             return;
                         }
                
                         System.out.println("Cold");
                    }
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2016-12-15
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多