このメソッドの役割は、配列から値を削除することです。残りの要素は、配列の先頭に移動するだけです。配列のサイズは変更されません。最後の要素の位置は1つ少なくなります。最後の要素の位置は0で埋めてください。配列に複数のtoRemoveがある場合、最初のオカレンスだけが除去される。このメソッドには戻り値がありません。配列に要素がない場合は、何も効果がありません。Javaでのこのremoveメソッドのロジックの理解
ソリューション:
public static void remove(int[] arr, int toRemove) {
boolean done = false;
int position = 0;
for(int pos = 0; pos < arr.length; pos++) {
if(!done && arr[pos] == toRemove) {
done = true;
position = pos;
}
if(done) {
for(int i = position + 1; i < arr.length; i++) {
arr[i - 1] = arr[i];
}
arr[arr.length -1] = 0;
}
}
}
私はこのアルゴリズムがどのように動作するか、次のではないのです。ブール値を使用すると私は混乱します。私はプリミティブデータ型が何をしているのか完全に理解していないと感じています。しかし、それはどういう意味ですか?私はブール値を理解していません。 私はtoRemove値が見つかった場所のインデックスのintプレースホルダーが必要な理由を理解します。 forループを使用してインデックスとそれぞれの値を1つずつ繰り返し、正確にtoRemoveが見つかる場所を特定することが望ましいと私は理解しています。したがって、私はいくつかの任意のインデックスでtoRemove値が存在する場合、我々は条件付きのチェックポイントを見たいと思う理解し、そしてd:!
if(arr[pos] = toRemove) // then bingo we've found him
私はブール行われ、ブールが私を混同し理解していません。 なぜこのチェックポイントは完了したのですか?その後、もう一度チェック(完了)?なぜループfor(int i = position + 1; i < arr.length; i ++)を呼び出し、そのあとにループarr [i - 1] = arr [i];?最終的にarr [arr.length-1] = 0およびposition = posになります。
私はvariablenameOfArrと書かれた特定のindiciesの値にアクセスしたいとき、[]をボックスの中に入れます。私はこれをすべてまとめるのが難しいです。
はあなたにこの場合
は、このコードを削除することをあなたは確かにあります値の最初の出現のみ?値が複数回表示される場合は、複数の要素が削除されるように見えます(最初の要素の後に、必ずしも一致する要素とは限りません)。 'if(done)'ブロックの最後に 'return;'ステートメントがないかもしれませんか? –
'if(arr [pos] = toRemove)'注意:これはコードが言うことではなく、どちらも有効ではありません(これは代入であり、比較ではありません)。 –
インデントを修正するコードを編集しました。以前はとても混乱していました。正しい字下げは、コードをよりよく理解するのに役立ちます。 –