删除阵列

时间:2019-01-17 16:01:41

标签: java

运行了一个简单的拍卖程序,唯一的问题是,如果在拍卖关闭之前删除了用户,则应该删除他/她的出价。我还没有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;
                }
            }

2 个答案:

答案 0 :(得分:0)

数组一旦初始化就无法更改大小。如果创建数组new String[10];,它将永远有10个项目(默认情况下为null)。将索引设置为null不会改变它。

String[] items = new String[] {"String1", "String2", "String3"};
items[1] = null;

此数组现在看起来像[String1, null, String3]。 如果需要尽可能多地更改数组,最好使用ListMap

如果您想轻松地将一个对象链接到另一个对象,我建议使用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.
}));