我正在尝试用Java创建一个程序,允许用户在其殖民地中设置他或她想要的动物数量,然后询问用户他或她是否希望给予动物维生素以减少疾病。没有维生素,疾病发生率为25%,如果动物生病,则发生20%的维生素,其中10%死亡。结果列在JOptionPane中。我有下面的代码,出于某种原因,当一个随机数生成在25或20以上时,疾病不会设置为false,它仍然设置为true,我通过创建一个isItSick变量来显示这一点,该变量显示维生素是否为boolean根据随机数生成器设置为true或false。
数学并没有正确出现,我猜我的问题在于if if else声明维生素和JOption是和否方法,但我不知道如何解决这个问题。
MAIN CLASS
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);
}
}
TEST CLASS
public class AnimalsTest {
public static void main(String[] args) {
Animals newColony = new Animals();
newColony.setStartingSize();
newColony.setVitamin();
newColony.setSick();
newColony.sickEffect();
newColony.setSickText();
newColony.getFinalDialogOutput();
}
}
答案 0 :(得分:4)
在某些if语句中,您使用的是=
==
if (vitamin = true && rNumber <= 20)
=
用于分配。它设置变量的值。 ==
用于比较。它检查2个变量是否相等。答案 1 :(得分:1)
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
变量为lowerCamelCase
(isithealthy
应为isHealthy
)
返回boolean
的方法应该命名为isXXX
或hasXXX
或其他一些占有。
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
答案 2 :(得分:0)
你在条件中将维生素等于真。 =
是赋值运算符。请改用==
。