首页 > 解决方案 > JAVA:if/else 语句产生不正确的结果

问题描述

我正在创建一个猜谜游戏程序,用户必须输入一个介于 1 到 100 之间的数字并尝试猜测“幻数”。

我正在尝试添加“提示”功能,根据用户猜测与计算机选择的随机数的接近程度,将出现一条消息,显示如下消息:

不幸的是,当我输入一个数字并按下“GUESS”按钮时,猜到的数字会出现错误的“提示”。具体来说,“沸腾!在 1 到 4 之间!” 但是,当我输入准确的“幻数”时,会显示正确的文本。““你说对了!“(幻数)”是幻数!

为了让我每次都能看到“幻数”是什么,我添加了一行代码,稍后将删除。

仅供参考:这是一个学校项目,我的老师在作业中添加了这个提示:

在 Math 类中,您可以使用一种方法来查找数字的绝对(正)值。您将需要使用此方法来帮助您确定猜测与密码的距离。这将允许您确定应报告哪条消息以获得提示。下面的示例代码:

int numAbsolute = Math.abs(num);
System.out.println(num); // output: -12
System.out.println(numAbsolute); // output: 12

此外,您将需要设置两个条件控制结构来生成两种不同的消息(一种来自基本作业,一种用于扩充)。您可以使用连接运算符 (+) 将两条消息连接成一条消息,并在文本字段中显示连接的消息。

这是我的条件控制结构代码:

public class GuessingGame extends javax.swing.JFrame {

    //Create the random number between 1 & 100
    int randNum = (int)Math.ceil(Math.random()*100);
    int numAbsolute = Math.abs(randNum);

我的其余代码:

private void guessButtonActionPerformed(java.awt.event.ActionEvent evt) {                                            

        System.out.println("Secret number is " + randNum); // to be removed later
        
        int input;
        input = Integer.parseInt (guessInput.getText());
        
        if (input == randNum)
        {
        guessOutput.setText("YOU GOT IT! " + randNum + " is the magic number!");
        }
        else if (input - randNum + numAbsolute > 1)
        {
            guessOutput.setText("Boiling! Between 1 and 4 away!");
        }
        else if (input - randNum + numAbsolute > 5)
        {
            guessOutput.setText("Hot! More than 5 away!");
        }
        else if (input - randNum + numAbsolute > 15)
        {
            guessOutput.setText("Cool: More than 15 away.");
        }    
        else if (input - randNum + numAbsolute > 10)
        {
            guessOutput.setText("Warm! More than 10 away!");
        }
        else if (input - randNum + numAbsolute > 25)
        {
            guessOutput.setText("Cold: More than 25 away.");
        }
        else if (input - randNum + numAbsolute > 50)
        {
            guessOutput.setText("Sheesh, Freezing: more than 50 away.");
        }
        


    }                                           

任何帮助将不胜感激!

标签: javaif-statement

解决方案


因为randNum是正数,numAbsolute所以会等于randNum

这当然意味着input - randNum + numAbsolute永远等于input。除非input等于 0,否则它将始终大于1。所以第一个else if永远是真的,其余的不会被检查。

我相信目的是取 和 之间的差inputrandNum并得到它的绝对值:

numAbsolute = Math.abs(input - randNum);

然后,您需要考虑进行检查的顺序。如果绝对差大于5,那么它也大于1。所以你需要颠倒你检查的顺序:

if (input == randNum) { ... }
else if (numAbsolute > 50) { ... }
else if (numAbsolute > 25) { ... }
else if (numAbsolute > 15) { ... }
else if (numAbsolute > 10) { ... }
else if (numAbsolute > 5) { ... }
else if (numAbsolute > 1) { ... }

推荐阅读