java:if/else语句产生错误的结果

vcudknz3  于 2021-06-30  发布在  Java
关注(0)|答案(3)|浏览(327)

我正在创建一个猜谜游戏程序,用户必须输入一个介于1和100之间的数字,并尝试猜测'魔术数字'。
我正在尝试添加一个“提示”功能,根据用户猜测与计算机选择的随机数的接近程度,将出现一条消息,显示如下消息:
在50多英里外结冰。
寒冷超过25英里。
冷却超过15分钟。
暖气超过10英里。
热度超过5度。
在1到4之间沸腾。
不幸的是,当我输入一个数字并按下“猜测”按钮时,错误的“提示”显示在猜测的数字上。特别是“沸腾!在1到4之间!”但是,当我输入准确的“幻数”时,会显示正确的文本。“”你明白了!”(幻数)“就是幻数!”
为了让我每次都能看到“幻数”是什么,我添加了一行代码,稍后将删除这些代码。
仅供参考:这是一个学校项目,我的老师在作业中添加了以下提示:
在数学类中,有一个方法可以用来求一个数的绝对值(正值)。您将需要使用此方法来帮助您确定猜测距离秘密号码有多远。这将允许您确定应该报告哪个消息作为提示。示例代码如下:

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

此外,还需要设置两个条件控制结构来生成两个不同的消息(一个来自基本赋值,另一个用于扩展)。您可以使用concatenate操作符(+)将两条消息连接起来形成一条消息,并在文本字段中显示连接的消息。
这是我的条件控制结构代码:

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.");
        }

    }

任何帮助都将不胜感激!

toiithl6

toiithl61#

因为 randNum 是正数, numAbsolute 将等于 randNum .
这当然意味着 input - randNum + numAbsolute 永远等于 input . 除非 input 等于零,那么它总是大于 1 . 所以第一个 else if 永远都是真的,其余的都不会被检查。
我相信这样做的目的是为了 input 以及 randNum ,得到它的绝对值:

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) { ... }
iq3niunx

iq3niunx2#

你犯了一个合乎逻辑的错误。我们来分析一下以下情况:

else if (input - randNum + numAbsolute > 1)
{
    guessOutput.setText("Boiling! Between 1 and 4 away!");
}

如果 input - randNum + numAbsolute = 2 ,它将成为 true .
如果 input - randNum + numAbsolute = 6 ,它将成为 true .
如果 input - randNum + numAbsolute = 15 ,它将成为 true .
以此类推…即。它将覆盖所有大于 1 .
换句话说,此条件将不允许执行以下其他条件:

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.");
}

如何解决?
按相反的顺序重新排列你的条件,即。

if (input == randNum)
{
    guessOutput.setText("YOU GOT IT! " + randNum + " is the magic number!");
}
else if (input - randNum + numAbsolute > 50)
{
    guessOutput.setText("Sheesh, Freezing: more than 50 away.");
}
else if (input - randNum + numAbsolute > 25)
{
    guessOutput.setText("Cold: More than 25 away.");
}
//...
z9gpfhce

z9gpfhce3#

如果你想-你可以改变if-else的执行顺序。
现在你从

if (input - randNum + numAbsolute > 1){
            guessOutput.setText("Boiling! Between 1 and 4 away!");
        }

这个条件总是正确的。
作为一种选择,你可以开始

if (input - randNum + numAbsolute > 50){
            guessOutput.setText("Sheesh, Freezing: more than 50 away.");
        }else if (input - randNum + numAbsolute > 25){
            guessOutput.setText("Cold: More than 25 away.");
        }

等等。。。

相关问题