Java 带有用户从JOptionPane中选择的选项的If-then语句
我正在尝试用Java创建一个程序,允许用户设置他或她想要的动物数量,然后询问用户是否希望给动物服用维生素以减少疾病。25%的动物在没有维生素的情况下会生病,20%的动物在没有维生素的情况下会生病,如果动物生病,其中10%会死亡。结果列在JOptionPane中。我有下面的代码,出于某种原因,当一个随机数在25或20以上生成时,疾病没有设置为false,它仍然设置为true,我通过创建一个isItSick变量发现了这一点,该变量显示基于随机数生成器的vitamin boolean是否设置为true或false 虽然计算结果不正确,但我猜我的问题在于维生素和JOption的if-then-else语句是和否方法,但我不确定如何解决这个问题 主类Java 带有用户从JOptionPane中选择的选项的If-then语句,java,swing,joptionpane,Java,Swing,Joptionpane,我正在尝试用Java创建一个程序,允许用户设置他或她想要的动物数量,然后询问用户是否希望给动物服用维生素以减少疾病。25%的动物在没有维生素的情况下会生病,20%的动物在没有维生素的情况下会生病,如果动物生病,其中10%会死亡。结果列在JOptionPane中。我有下面的代码,出于某种原因,当一个随机数在25或20以上生成时,疾病没有设置为false,它仍然设置为true,我通过创建一个isItSick变量发现了这一点,该变量显示基于随机数生成器的vitamin boolean是否设置为true
import java.util.Random;
import javax.swing.JOptionPane;
import javax.swing.JOptionPane;
public class Animals {
private String isithealthy; //Sting stating if the animals took vitamins.
private String isItSick; //String stating if the animals became sick.
private int rNumber; //Random number generating for chance of sickness.
private int requestVitamins;
private double startingSize; //Starting size of number of animals.
private double died; //Number of animals died from sickness.
private double finalSize; //Number of animals left after sickness test.
private boolean vitamin = false; //If true, decreases chances of getting sick.
private boolean sickness; //If sick, 10% of starting size of animals die off.
public void setStartingSize()
{
startingSize = Double.parseDouble(JOptionPane.showInputDialog(null, "Please enter the starting size of your animal colony.",
"Creating Your Animal Colony", JOptionPane.INFORMATION_MESSAGE));
}
public void setVitamin()
{
requestVitamins = JOptionPane.showConfirmDialog(null, "Giving your animals vitamins decreases the chance of your animals from getting sick and dying off. Would you like to give your colony vitamins?",
"Keeping Your Animals Healthy",JOptionPane.INFORMATION_MESSAGE, JOptionPane.YES_NO_OPTION);
if (requestVitamins == JOptionPane.YES_OPTION)
vitamin = true;
else
vitamin = false;
}
public void setSick()
{
Random number = new Random();
rNumber = number.nextInt(100);
if (vitamin == true && rNumber <= 20)
sickness = true;
else if (vitamin == false && rNumber <= 25)
sickness = true;
else
sickness = false;
}
public void sickEffect()
{
if (sickness == true)
finalSize = startingSize*0.10;
died = startingSize - finalSize;
}
public void setHealthyText()
{
if (vitamin == true)
isithealthy = "Yes";
else if (vitamin == false)
isithealthy = "No";
}
public void setSickText()
{
if (sickness == true)
isItSick = "Yes";
else
isItSick = "No";
}
public void getFinalDialogOutput()
{
JOptionPane.showMessageDialog(null, "Starting Size: " + startingSize + "\n Random Number: " + rNumber + "\n Sickness and death: " + isItSick + isithealthy + ", " + died + " died" + "\n Final size of colony: " + finalSize, "Animal Colony Summary", JOptionPane.INFORMATION_MESSAGE);
}
}
在一些if语句中,您使用的是应该使用的
=
if (vitamin = true && rNumber <= 20)
if(vitamin=true&&rNumber您正在条件语句中将vitamin设置为true。=
是赋值运算符。请改用=
。因为您实际上没有显示假定调用setHealthyText()的代码。
下面是一些技巧,可以让大家更容易地调试代码
始终对一行程序使用{}:
有太多的机会添加一行逻辑,而忘记它将始终或永远不会执行
public void setHealthyText()
{
if (vitamin == true)
{
isithealthy = "Yes";
}
else if (vitamin == false)
{
isithealthy = "No";
}
}
对于非常简洁的陈述,以下内容也是可以接受的
public void setHealthyText()
{
if (vitamin) { isithealthy = "Yes"; }
else { isithealthy = "No"; }
}
不要直接将布尔值与true/false
进行比较,这是一种重复,很难解释它们是如何组合在一起的:
if(someBoolean==true)
应该是if(someBoolean)
或者if(!someBoolean)
来测试false
学习使用正确的命名约定:
变量是较低的均值
(isithealthy
应该是isHealthy
)
返回boolean
的方法应命名为isXXX
或hasXXX
或其他所有格
isSick()
isHealthy()
hasVitamin()
学习使用三元语句:
这是混淆代码的噩梦,不必是:
使用==进行比较/检查,使用==分配。几乎所有的if条件都是错误的。好的,我修复了==到==,我编辑了上面的代码,但仍然得到“null”对于isithealthy变量,即使当我在JOptionPane中单击NO并使Vitavists为false时,通过单击它,isithealthy应该说NO,并且在运行时它说为null。您需要显示相关的代码,您有一堆与您的事件处理程序不相关的代码,您说应该调用此方法,当然不是,但我们c我没有告诉你为什么!好吧,我把=改为==,我编辑了上面的代码,但仍然得到“null”对于isithealthy变量,即使我在JOptionPane中单击“否”,并将Vitavists设置为false,通过单击该变量,isithealthy应表示“否”,并且在运行时表示为null。@ZionTodd我没有看到从OK调用setHealthyText
的位置。我已将=修改为==,我编辑了上面的代码,但仍然得到“null”对于isithealthy变量,即使当我在JOptionPane中单击“否”并将其设为false时,通过单击该选项,isithealthy应表示“否”,并且在运行时表示为null
isSick()
isHealthy()
hasVitamin()
public void setHealthyText()
{
this.isHealthy = vitamin ? "Yes" : "No";
// variable boolean true false
}
if (vitamin == true && rNumber <= 20)
sickness = true;
else if (vitamin == false && rNumber <= 25)
sickness = true;
else
sickness = false;
this.sickness = vitamin && rNumber <= 20 || !vitamin && rNumber <= 25;
public static void main(final String[] args)
{
isSick(true, 26);
isSick(true, 24);
isSick(false, 24);
isSick(false, 18);
}
private static void isSick(final boolean vitamin, final int hp)
{
System.out.println(vitamin && hp <= 20 || !vitamin && hp <= 25 ? "Sick" : "Not Sick");
}
Not Sick
Not Sick
Sick
Sick