如何向对象添加或减去String值,并在值为空时将值设置为“none”?

时间:2013-03-12 03:39:36

标签: java

我有一个类Passengers,其成员属性String nameint healthString disease具有setter和getter方法。 disease变量最初将保留null。这是班级

public class Passengers
{
    private String name;
    private int health;
    private String disease;

    public Passengers(String _name, int _health, String _disease)
    {
        name = _name;
        health = _health;
        disease = _disease;
    }

    public void setHealth(int _health)
    {
        health = _health;
    }
    public void setDisease(String _disease)
    {
        disease = _disease;
    }

    public String getName()
    {
        return name;
    }
    public int getHealth()
    {
        return health;
    }
    public String getDisease()
    {
        return disease;
    }
}

我想知道的是如何将新字符串添加到此变量中,然后如何将其带走。例如,一名乘客账单从null开始治疗他的疾病,然后感染疟疾和感冒。 Bill的disease变量现在应该保留malaria, cold。现在说用户选择治疗比尔的疟疾。我怎么会 1)加入疟疾和感冒 2)从disease中减去疟疾?
每当我试图用

改变疾病时
passengers[index].setDisease() = null;

它说“错误:类中的方法setDisease乘客不能应用于给定的类型:
必需:字符串
发现:没有参数“

3 个答案:

答案 0 :(得分:3)

我建议将疾病列为Set的字符串。

Set<String> diseases = new HashSet<String>();

void addDisease(String disease) {
    diseases.add(disease);
}

void removeDisease(String deisease) {
    diseases.remove(disease);
}
在这种情况下,

Set比其他Collections“更好”,因为它们无法保留重复项。

答案 1 :(得分:0)

您应该给班级List<String>,例如ArrayList<String>,并将疾病列入此列表。

更好的是,创建一个类或一个疾病的枚举,让你的Passenger类使用List<Disease>并避免过度使用String。然后,您可以为班级公开addDisease(Disease disease)removeDisease(Disease disease)方法。

顺便提一下,你上面的班级应该被命名为乘客,单数,而不是乘客,复数,因为它代表了单一乘客的概念。

答案 2 :(得分:0)

如果您使用的List ArrayList index,您可以Set访问您的元素(疾病名称),但是它会允许插入重复数据(同样的疾病可能)多次添加,不必增加疾病的数量,可能会出现一些问题)。 如果您使用HashSet之类的particular disease by index,它将仅允许使用唯一元素,因此不会出现与重复条目相关的问题,但同时您无法访问LinkedHashSet(HashSet with Linked approach)(如果您需要,截至目前,我不知道你的进一步要求)。 据我所知,我建议您使用{{1}}它将为您提供FIFO顺序而不会出现重复插入问题。