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