2

誕生日

オブジェクト指向プログラミングの入門コースで Java の課題があります。私は課題を終え、プログラムは期待どおりに動作し (これを達成するのにしばらく時間がかかりました!)、目的の出力が得られました。私の方法の 1 つだけで、IF ステートメントで 2 つの FOR ループを使用しましたが、より簡単で、より優れた、またはより効率的な別の方法があるかどうか疑問に思っています。しかし、ArrayList を使用することは許可されていません。ArrayList の方が簡単で、より優れており、より効率的であることは理解していますが、ArrayList を使用できなくても、コードを改善して同じ結果を達成することは可能でしょうか?

基本的に、ユーザーにプロパティ オブジェクトの ID 番号を入力するように要求し、その ID を配列のインデックス位置に一致させ、そのオブジェクトを 1 つの配列 (propertiesForSale) から別の配列 (propertiesSold) にコピーし、カウンターに 1 のインクリメントを追加します。 (numPropertiesSold) 最初の (propertiesForSale) 配列を削除して圧縮する前に (私の先生は再シャッフルを言いました)、他のカウンター (numPropertiesForSale) を 1 減らします。

私のコードは次のとおりです..

public void sellProperty(int inID)
    {
         for (int index = 0; index < numPropertiesForSale; index++) {

            if (propertiesForSale[index].getId() == inID) {

                propertiesSold[numPropertiesSold]= propertiesForSale[index];
                numPropertiesSold++;

                for (int i = index; i < numPropertiesForSale; i++) {

                propertiesForSale[i] = propertiesForSale[i + 1];
                }

                numPropertiesForSale--;
            }
        }
    }

ArrayList を使用せずに、より簡単、より効果的、またはより効率的な方法がある場合、その方法があるかどうか、またどのように行われるかを知りたいだけです。

お時間、ご辛抱、ご意見をお寄せいただきありがとうございます (該当する場合)。

4

4 に答える 4

3

使用が許可されていない場合、それはArrayListあなたができる最善のことだと私には思えます。

ループを使用して配列を下にシフトするのではなく、ネイティブメソッドであるため、独自のループの代わりにpropertiesForSale使用することを検討したい場合があります。System.arraycopy()arraycopy()

于 2012-04-05T01:14:50.810 に答える
1

ノードから作成された独自のカスタム リンク リストを使用できます。そうすれば、物件を売却するときに配列のエントリをシフトする必要はありません。リストからノードを削除し、ポインターを更新するだけです。

于 2012-04-05T01:16:43.997 に答える
1

propertiesForSaleプロパティを売却する前に、配列を完全に埋めてコードをテストします。numPropertiesForSale == propertiesForSale.lengthつまり、要素を削除しようとするとどうなるでしょうか?

于 2012-04-05T06:13:20.370 に答える
1

で を検索しinIDていpropertiesForSaleます。一致するものが見つかったら、そのオブジェクトを次のインデックスに転送し、その上にあるすべてのレコードを 1 つ下のインデックスに転送して配列propertiesSold圧縮します。最後の要素はそこに残されていますが、カウントを減らすため、次のルックアップではアクセスされません。

もう 1 つのオプションは、配列をまったく圧縮せず、代わりに null に設定することです。もちろん、外側の for ループの最大境界を調整し、null 以外のチェックを追加する必要がありますが、内側の for ループはなくなりました。

それは良いですか?多分。あなたが持っているものはかなり良いです。

于 2012-04-05T01:23:29.507 に答える