少し前のプログラミングクラスでは、比較的単純なタスクが与えられました。その本質は次のように要約できます。
nが常に <= mであるn文字列の配列 (リストではない) を格納し、新しい文字列を追加して古い文字列を削除できるようにします。(この例では、mは 50 でした)
その後、このことについて友達と話し合ったとき、私たち 3 人全員が別の方法で解決したことに気付きました。私の質問 (単なる好奇心から) は、私たちのどちらが最良の答え (すべてが等しい場合) とその理由です。
友人 Aは、本質的に ArrayList を実装することにしました。異なるサイズの新しい配列を作成し、元の配列のすべての要素をfor
ループで新しい配列に入れます(追加/削除していたものをプラスまたはマイナスします)。
友人 Bは単純に長さmの配列を作成し、値を null に設定して要素を削除し (例: array[13] = null
)、空のスポットが見つかるまでインデックス 0 から順方向にスクラブして要素を追加しました (これはfor
ループでした)。
Friend C [Me]も長さmfor
の配列を作成しましたが、文字列が削除されたときに、n -1 が常に最後の値のインデックスになるように、後続のすべての値を前方にシフトしました (つまり、ループでインデックスを 1 減らしました)。 n > 0)、nは新しい値を追加するインデックスでもありました (for
文字列を追加するためのループを排除します)。
それはかなり基本的なクラスであり、私たちが行った限り、彼らは私たちがどのようにそれを行ったかを気にしませんが、私たちは興味があります.
編集:重要かもしれない何かを省略したことに気づきました。この問題は、インデックスではなく値(例: ) で文字列を削除することを指定していたため、値 (およびそのインデックス) を見つけることも必要でした。removeString("someString")