1

次のコード スニペットでシンボルが見つからないというエラーが発生する理由について、誰かが私に洞察を与えてください。

乾杯!

public static void swap(String swapArray, int location1, int location2) {
    int tempswap1 = swapArray.get(location1);
    int tempswap2 = swapArray.get(location2);
    swapArray.set(location1)=tempswap2;
    swapArray.set(location2)=tempswap1;
}
4

5 に答える 5

1

エラーの原因:

swapArray.set(location1)

swapArray.get(location1)

swapArrayString型であるため、メソッドはなく、クラスにはsetメソッドさえありません。getString

考えられる解決策:

私が間違ってい swapArray なければ、Listタイプする必要があります。確認してください。補足として、IDE 多くの時間を節約できる Eclipse のようなものを使用してください。

さらに役立つかもしれません:

アップデート:

    public static void swap(List swapArray, int location1, int location2) {
-------------------------------^
        int tempswap1 = swapArray.get(location1);
        int tempswap2 = swapArray.get(location2);
        swapArray.set(location1,tempswap2);
        swapArray.set(location2,tempswap1);
    }

リストを swap メソッドに渡していると仮定します。

于 2013-10-15T12:05:20.390 に答える
1

質問のタイトルに記載されているタイプのリストであると仮定すると、swapArray次のように値を交換する必要があります

swapArray.set(location1, tempswap2); // Set the location1 with value2
swapArray.set(location2, tempswap1); // Set the location2 with value1

エラーの原因はswapArray.set(location1)=tempswap2;. 左側はset()値を返すメソッド call( ) で、値に別の値を代入しようとしていますが、これは不正です。代入演算子の LHS に変数が必要です。


また、これは実際のメソッド シグネチャである必要があります。

public static void swap(List<Integer> swapArray, int location1, int location2)
                        ^^^^^^^^^^^^^ - This is the type of the object you're passing. You needn't give the name of that object as such.      

補足:入力ミスや構文エラーが発生しやすいため、コードを手動でここに入力するのではなく、常に IDE からコードをコピーして貼り付けることを忘れないでください。

于 2013-10-15T12:10:11.530 に答える
0

私はピーターの答えが好きです。しかし、setter を呼び出す目的で文字列をコレクションに入れるだけの場合 (それはとにかく存在しません)、ネイティブ コードですべて行うことができます。

多くの文字列操作を行っている場合、スレッド セーフが必要な場合は StringBuffer を使用し、プログラムがマルチスレッドでない場合は StringBuilder を使用する必要があることに注意してください。前述のように、文字列は実際には不変です。つまり、文字列を変更するたびに、実際には古いオブジェクトが破棄され、新しいオブジェクトが作成されます。

開始点 (例: loc1) がオフセット 0 である可能性がある場合、このコードはもう少しスマートにする必要がありますが、ネイティブ文字列操作の一般的な考え方は次のとおりです。

String x = a.substring(loc1,loc1+1);
String y = b.substring(loc2,loc2+1);
a = a.substring(0, loc1) + y + a.substring(loc1);
b = b.substring(0,loc2) + x + b.substring(loc2);
于 2013-10-15T12:31:17.313 に答える
0

ここで使用できるトリックがあります

public static <T> void swap(List<T> list, int pos1, int pos2) {
    list.set(pos1, list.set(pos2, list.get(pos1)));
}
于 2013-10-15T12:11:50.910 に答える
0

文字列は Java では不変です。それらを変更することはできません。文字を置き換えて新しい文字列を作成する必要があります。このスレッドを確認してください: 文字列内の特定のインデックスで文字を置き換えますか?

于 2013-10-15T12:16:47.263 に答える