0

タイトルが大丈夫かどうかはわかりませんが、BlueJを使用してJavaを少し学び、オークションプロジェクトに取り組んでいます(Objects First With Java:A Practical Introduction UsingBlueJの第4章の例に基づいています)。 、いくつかの変更があります)。私がやろうとしているのは、オークションをパラメーターとして受け取る2番目のコンストラクターを追加することです。そのオークションが現在終了している場合は、未販売のロットを使用して新しいオークションを作成します。それがまだ開いているかnullの場合、このコンストラクターは私のデフォルトのコンストラクターのように機能するはずです。

これが私のデフォルトコンストラクターでの私のコードの始まりです:

...

public class Auction
{
    // The list of Lots in this auction.
    private ArrayList<Lot> lots;
    // The number that will be given to the next lot entered
    // into this auction.
    private int nextLotNumber;
    // Whether or not the auction is open for bidding.
    private boolean openForBid;

    /**
     * Create a new auction.
     */
    public Auction()
    {
        lots = new ArrayList<Lot>();
        nextLotNumber = 1;
        openForBid = true;
    }

    /**
     * Second Constructor
     */ 
    public Auction(Auction auction)
    {
        //If the auction is open..
            //Create a new Auction the same as above
        //else..
            //create a new auction with unsold lots from the specified auction
    }

私はこのオークションクラスのスケルトンをほとんど命令なしで処理していますが、現在入札がないロットのArrayListを返す必要があるメソッドがあります。

public ArrayList<Lot> getNoBids()

ですから、コンストラクターに渡されたオークションでそれを呼び出す必要があると思いますが、これをすべてまとめることに頭を悩ませているようには見えません。私はJavaとArrayListsにかなり慣れていないので、どんな助けでもありがたいです!ありがとう。

4

3 に答える 3

2

デフォルトの動作/コンストラクターを開くように設定しているので、次のようになります。

public Auction(Auction auction) {

   this();

   if (!auction.openClosed) {
      lots.addAll(auction.getNoBids());
      // set close flags as necessary...
   }
} 

また、のような変数を使用するopenClosedと混乱します。openForBiddingその目的をより明確にするために呼び出すことができます。

于 2012-10-18T00:36:06.233 に答える
1

合格Auction auctionステータス(クローズ済み)が与えられた場合、新しいオークションにロットを追加したい場合は、次のように実行できます。

public Auction(Auction auction)  {
     this.lots =new ArrayList<Lot>();
     openClosed = true;
     if(!auction.isOpenForBid()){
       nextLotNumber = 1;
       this.lots.addAll(auction.getLots()); 
    }else{
       nextLotNumber = this.lots.size(); 
    }
}

両方の条件でopenClosedtrueに設定する必要があると思います。以前のオークションからロットを追加する場合は、それnextLotNumberに応じて、つまりロットサイズを追加して初期化することをお勧めします。

于 2012-10-18T00:33:35.337 に答える
-1

このクレジットは上記のReimeusに送られるはずですが、彼の答えについてコメントすることはできないようです。

super()の代わりにthis()を呼び出す必要があることを除いて、基本的に彼は正しかった。

  public Auction(Auction auction)
  {
      this();

      if (!auction.openClosed) {
         lots.addAll(auction.getNoBids());
         // set close flags as necessary...
      }
  } 
于 2012-10-18T00:48:12.660 に答える