我必须在数组末尾添加一个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++;
}
答案 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);