java - JAVA:if/else 语句产生不正确的结果
问题描述
我正在创建一个猜谜游戏程序,用户必须输入一个介于 1 到 100 之间的数字并尝试猜测“幻数”。
我正在尝试添加“提示”功能,根据用户猜测与计算机选择的随机数的接近程度,将出现一条消息,显示如下消息:
- 结冰——50 多远。
- 冷——超过 25 远。
- 酷——超过 15 个。
- 温暖——10 多远。
- 热——超过 5 分。
- 沸腾——在 1 到 4 之间。
不幸的是,当我输入一个数字并按下“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.");
}
}
任何帮助将不胜感激!
解决方案
因为randNum
是正数,numAbsolute
所以会等于randNum
。
这当然意味着input - randNum + numAbsolute
永远等于input
。除非input
等于 0,否则它将始终大于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) { ... }
推荐阅读
- spring - springdoc-openapi:当枚举来自生成的代码时,发布枚举作为参考
- javascript - 基于另一个对象递归更新特定键的嵌套对象值
- common-lisp - 以编程方式加载 Common Lisp 模块
- c# - 需要帮助修复这个跳跃缓冲区(问题:玩家偶尔会双跳)
- sql - SQL Server:根据同一列中的不同数据过滤掉结果
- elasticsearch - ElasticSearch 聚合返回整个子对象,而不仅仅是键
- android-studio - Flutter App:背景不会从黑色变为蓝绿色
- javascript - 莫里斯折线图无法正常工作
- java - 将方法引用返回到流
- java - 如何使用 helm3 将 Integer 值部署到 Spring Boot 应用程序?