私は過去2時間、次の2つの方法が異なる結果をもたらす理由を理解しようとしています。どちらも整数配列を取り、その中の連続した複製を削除し、削除された各複製の最後に "-1"を入れるメソッドです。ループ内で直接参照の代わりに変数を代入して結果が異なる
方法1は正しい出力を行い、方法2は無限ループに変わります。
//Method 1
private static void smoosh1(int[] ints) {
for (int i=0; i<ints.length-1; i++) {
while (ints[i] == ints[i+1] && ints[i] != -1) {
for (int x=i; x<ints.length-1; x++) {
ints[x] = ints[x+1]; }
ints[ints.length-1] = -1;
}
}
}
//Method 2
public static void smoosh(int[] ints) {
for (int i = 0; i < ints.length - 1; i++) {
int curVal=ints[i];
int nextVal=ints[i+1];
while (curVal == nextVal && curVal !=-1) {
for (int x = i; x < ints.length-1; x++) {
ints[x] = ints[x + 1];
}
ints[ints.length-1] = -1;
}
}
ループ内の変数を宣言すると出力に影響する理由を教えてください。ありがとう。
注意: - この問題は、バークレーのMOOC 61Bの第1部、宿題3に記載されています。 リンク: - https://people.eecs.berkeley.edu/~jrs/61b/hw/hw3/第スニペットはwhile
ループが各反復でcurVal
とnextVal
の値を変更する必要があり、最初のスニペットと同様に動作するために
CURVALとnextValNever変更をそうCURVAL 'の出力== nextValは&& CURVAL = - 1 '常に同じです!。あなたの場合は「真」です。 – NewUser
実際、 'while 'の代わりに' if'が必要なことがあるので、 'while(curVal == nextVal && curVal!= - 1)'を 'if(curVal == nextVal && curVal!= - 1) 'はコードのトリックをする必要があります... –