0

我必须在数组末尾添加一个字符串参数。如果 String 已经存在于数组中,则抛出异常。我不知道。任何人都可以帮忙吗?这是我到目前为止所拥有的

public static void addCity (String city) throws Exception
{
    for (int i = 0; i < MAX_CITIES;i++)
    {
        if (city == cityNames[i])
            throw new Exception("This city already exists");
    }

    String [] temp = new String[cityNames.length+1];
    for (int i = 0; i < cityNames.length;i++) {
        temp[i] = cityNames[i];
    }
    temp[temp.length-1] = city;
    cityNames = temp;

    manyItems++;
}
4

4 回答 4

2

要测试是否String a等于String b,请使用a.equals(b),而不是a == b

a == b适用于 C++,而不是 Java。)

于 2012-10-06T18:52:57.057 回答
0

使用列表会更容易:

List<String> cityNames = new ArrayList<String>();

if(cityNames.contains(city)) {
    throw new Exception("This city already exists");
}
cityNames.add(city);
于 2012-10-06T18:55:08.727 回答
0

除了String比较之外,您的代码看起来不错:

if (city == cityNames[i])

这不会进行正确的String比较:它只会比较对象引用,通常是false.

用于String.equals此:

if (city.equals(cityNames[i]))
于 2012-10-06T18:54:04.773 回答
0

什么是 MAX_CITIES?我认为您的第一个循环应该是直到 i < cityNames.length,而不是 MAX_CITIES,因为当您增加数组的大小时,您似乎没有更新 MAX_CITIES。

您应该使用 equals() 方法来比较 String 对象,而不是 ==。

如果不只是将新数组增大一个元素,而是将大小增加一倍,那也可能会很好。这样,您不必在每次添加新元素时都完成复制数组的所有工作。您需要一个变量来跟踪数组中的下一个空白点,它看起来像这样:

if (nextEmptyIndex == cityNames.length)
{
    String [] temp = new String[cityNames.length*2];
    for (int i = 0; i < cityNames.length;i++) {
        temp[i] = cityNames[i];
    }
}
temp[nextEmptyIndex] = city;
nextEmptyIndex++;
manyItems++;
于 2012-10-06T18:54:51.497 回答