如果那么语句与用户从JOptionPane中选择了选项

时间:2014-10-07 19:27:01

标签: java swing joptionpane

我正在尝试用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();

    }
}

3 个答案:

答案 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

学习使用正确的命名约定:

变量为lowerCamelCaseisithealthy应为isHealthy

返回boolean的方法应该命名为isXXXhasXXX或其他一些占有。

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)

你在条件中将维生素等于真。 =是赋值运算符。请改用==