4

スワップ/交換演算子を含む以下のステートメントを記述する方法のロジックを理解しようとしています。これまでのところ、テキスト(問題解決のJavaイントロ)をグーグルで検索しましたが、運がありませんでした。誰かが以前に次のことに苦労していて、おそらく答えを見つけたことがありますか (これは文字列の例ですが、一般的に一時を使用するスワップ演算子に苦労しています):

2 つの文字列変数 s1 と s2 が既に宣言され、初期化されています。それらの値を交換するコードを書きます。

私は一時変数を使用することになっていることを知っています。それはまさに私のロジックがnullの場所です。

私が書いた方法は次のとおりです。

temp = s1;
s2 = temp;
4

4 に答える 4

3

間違ったソリューションでは、 の値を失いましたs2。スワップ中にその値を失わないように、いずれかの変数の値を保持するために使用tempします。

必要な作業のリストは次のとおりです。

  • s1どこかの値のコピーを作成します。
  • これで、隠したのコピーを使用して、 の値にs1割り当てることができます。s1s2
  • s2で作成したコピーに割り当てますs1
于 2012-07-21T19:02:26.323 に答える
2

完全を期すために、一時変数が必要ない特別な場合が1つあります。

交換する2つの値が同じ長さであり、言語でビット単位の演算子を使用できる場合は、 XOR交換を実行できます。

A = A bitwise xor B
B = A bitwise xor B
A = A bitwise xor B

最近のコンピューターでは、これが実用的であることはめったにありませんが、XOR演算の興味深い側面を理解し、実証することは良いことです。

于 2012-07-21T21:44:03.313 に答える
0

変数は、1 つのものしか保持できないコンテナーと考え​​てください。2 つの変数の値を交換するには、3 つのコンテナーが必要です。

String s1 = "Some string", s2 = "Another string", tmp;
tmp = s1; // put the first item into the third bin
s1 = s2; // put the second item into the first bin
s2 = tmp; // put the first item into the second item
于 2012-07-21T19:02:25.753 に答える
0

すべての言語で:

temp = s1; // temporarily store the s1 value because we'll replace it next
s1 = s2; // now s1 lost it's value, and got a new one
s2 = temp; // luckily s2 doesn't go home empty handed, the temp is still good
于 2012-07-21T19:02:27.667 に答える