Java 为拍卖创建构造函数,使对象包含以前未售出地块的ArrayList

Java 为拍卖创建构造函数,使对象包含以前未售出地块的ArrayList,java,constructor,bluej,Java,Constructor,Bluej,不确定我的标题是否合适,但是 我正在使用BlueJ学习一点Java,我正在从事一个拍卖项目(基于第4章Objects First With Java中的一个示例:使用BlueJ的实用介绍,有一些改动)。我要做的是添加第二个构造函数,该构造函数将拍卖作为参数,如果该拍卖当前已结束,则创建一个新的拍卖,其中包含未售出的地块。如果它仍然是打开的或空的,这个构造函数应该像我的默认构造函数一样工作 以下是我的默认构造函数代码的开头: ... public class Auction { // T

不确定我的标题是否合适,但是 我正在使用BlueJ学习一点Java,我正在从事一个拍卖项目(基于第4章Objects First With Java中的一个示例:使用BlueJ的实用介绍,有一些改动)。我要做的是添加第二个构造函数,该构造函数将拍卖作为参数,如果该拍卖当前已结束,则创建一个新的拍卖,其中包含未售出的地块。如果它仍然是打开的或空的,这个构造函数应该像我的默认构造函数一样工作

以下是我的默认构造函数代码的开头:

...

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
    }
。。。
公开拍卖
{
//这次拍卖的拍卖品清单。
私人住宅地段;
//输入的下一批货物的编号
//我参加了这次拍卖。
私有int NEXTLOTTNUMBER;
//拍卖是否公开招标。
私有布尔开放禁止;
/**
*创建一个新的拍卖。
*/
公开拍卖()
{
lots=新的ArrayList();
nextLotNumber=1;
openbank=true;
}
/**
*第二构造器
*/ 
公开拍卖(拍卖)
{
//如果拍卖会是公开的。。
//创建一个与上面相同的新拍卖
//否则。。
//使用指定拍卖中的未售出地块创建新拍卖
}
我正在为这个拍卖类编写一个框架,虽然没有什么指导,但有一个方法可以返回一个ArrayList,其中包含当前并没有出价的地块

public ArrayList<Lot> getNoBids()
public ArrayList getNoBids()

因此,我想我需要在传递给构造函数的拍卖中调用它,但我似乎无法集中精力将这一切放在一起。任何帮助都非常感谢,因为我对Java和ArrayList相当陌生!谢谢。

如果给出传递的
拍卖
状态(已关闭),您想在新的拍卖中添加地块,可以执行以下操作:

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(); 
    }
}
公开拍卖(拍卖){
this.lots=新的ArrayList();
openClosed=true;
如果(!auction.isOpenForBid()){
nextLotNumber=1;
this.lots.addAll(auction.getLots());
}否则{
nextLotNumber=this.lots.size();
}
}

我想,在这两种情况下,
openClosed
都应该设置为true,如果您要添加上一次拍卖中的地块,您可能需要相应地初始化
nextLotNumber
,即添加地块大小。

当您将默认行为/构造函数设置为open时,您可以有以下内容:

public Auction(Auction auction) {

   this();

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

同样,使用像
openClosed
这样的变量也会让人困惑。它可以被称为
openbanking
,这会让它的目的更清楚。

这一功劳应该归于上面的Reimeus,但我似乎无法对他的答案发表评论

基本上,他是对的,除了需要调用this()而不是super()


我不清楚这个问题;为什么你不能在传递给构造函数的拍卖中调用该方法?@DaveNewton我知道我可以调用它,我只是在设计构造函数本身时遇到问题。看起来很像我的答案:))包括注释和不一致的括号位置。嗯。@Reimeus,呃,很抱歉,我没有看到你广告已经回答了。我需要更快地回答:)哇,我刚刚意识到我也引用了错误的名称..我今晚很懒散!对于一个小错误,一个评论或建议的编辑通常比一个重复的答案好,IMO。谢谢你的回答,我继续并重命名了那个变量,因为它看起来非常混乱!谢谢你的提示关于在添加批次后初始化nextLotNumber。关于代码的唯一一点是,我不希望创建一个新的IsoTemporbid方法,这将添加参数拍卖中的所有批次,而不仅仅是未售出的批次,不是吗?您已经接受了一个答案,所以我希望您的问题得到解决,这也会起到同样的作用(添加所有批次)。如果您对添加开放批次有疑问,请告诉我。关于
isOpenForBid()
,如果属性不属于同一对象实例,我更喜欢通过访问器方法访问属性。
  public Auction(Auction auction)
  {
      this();

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