运行了一个简单的拍卖程序,唯一的问题是,如果在拍卖关闭之前删除了用户,则应该删除他/她的出价。我还没有100%下降,但是我想我走对了路。
出价必须为数组,现在可能已被删除或只是被移动了。这是先前的错误。
最高出价:[哇400 kr,男孩311 kr,男子33 kr,花花公子2 kr]
command>删除用户
名称>哇
哇已经从注册表中删除了
command>列表拍卖
拍卖#1:物品。最高出价:[男孩311 kr,人33 kr,线程“ main”中的异常java.lang.NullPointerException
public void removeBid(String name) {
for(int a = 0;a < bidIndex; a++) {
if(bids[a].getUser().getName().equals(name)) {
bids[a]=null;
bidIndex--;
break;
}
}
sortBids();
public void sortBids() {
if(bidIndex > 1) {
for(int a = 0; a < bidIndex -1; a++) {
for(int b = a + 1; b < bidIndex; b++) {
if(bids[a] == null || bids[a].getBid() < bids[b].getBid()) {
Bid temp = bids[a];
bids[a] = bids[b];
bids[b] = temp;
}
}
答案 0 :(得分:0)
数组一旦初始化就无法更改大小。如果创建数组new String[10];
,它将永远有10个项目(默认情况下为null)。将索引设置为null
不会改变它。
String[] items = new String[] {"String1", "String2", "String3"};
items[1] = null;
此数组现在看起来像[String1, null, String3]
。
如果需要尽可能多地更改数组,最好使用List或Map。
如果您想轻松地将一个对象链接到另一个对象,我建议使用HashMap。在这种情况下,您好像要将一个字符串(名称)链接到Bid对象。
Map<String, Bid> bids = new HashMap<String, Bid>();
Bid bid1 = new Bid(/*...*/);
Bid bid2 = new Bid(/*...*/);
// Add bids to the map
bids.put("Wow", bid1);
bids.put("Boy", bid2);
// Get any of these objects
Bid retrievedBid = bids.get("Wow");
// Or remove them
bids.remove("Wow");
HashMap在概念上与其他具有key -> value
关系的其他语言的关联数组相似。每个键都是唯一的,但值可以重复。
如果您需要的最终结果是数组,也可以将它们转换为数组。
Bid[] bidsArray = new Bid[0];
bidsArray = bids.values().toArray(bidsArray);
答案 1 :(得分:0)
一种实现此目的的方法是将数组转换为列表,然后使用Java流删除出价并转换回去。
System.Windows.Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{
Update the collection here.
}));