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等しいかどうかをテストするには、 , notString bを使用します。a.equals(b)a == b

( a == bJava ではなく、C++ で動作します。)

于 2012-10-06T18:52:57.057 に答える
0

String比較を除いて、コードは問題なく見えます。

if (city == cityNames[i])

これは適切な比較を行いません。Stringオブジェクト参照のみを比較します。通常はfalse.

これに使用String.equalsします:

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

MAX_CITIES とは何ですか? 配列のサイズを増やしたときに MAX_CITIES を更新していないように見えるため、最初のループは MAX_CITIES ではなく、i < cityNames.length までにする必要があると思います。

== ではなく、equals() メソッドを使用して String オブジェクトを比較する必要があります。

新しい配列を 1 要素だけ大きくするのではなく、サイズを 2 倍にするのもいいかもしれません。そうすれば、新しい要素を追加するたびに配列をコピーするすべての作業を行う必要がなくなります。配列内の次の空の場所を追跡する変数が必要で、次のようになります。

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 に答える
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 に答える