将字符串参数添加到数组的末尾

时间:2012-10-06 18:51:31

标签: java arrays string

我必须在数组末尾添加一个String参数。如果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 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

String比较外,您的代码看起来很好:

if (city == cityNames[i])

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

使用String.equals

if (city.equals(cityNames[i]))

答案 2 :(得分:0)

什么是MAX_CITIES?我认为你的第一个循环应该是直到我&lt; 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++;

答案 3 :(得分:0)

使用List更容易:

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

if(cityNames.contains(city)) {
    throw new Exception("This city already exists");
}
cityNames.add(city);