为了账号安全,请及时绑定邮箱和手机立即绑定

查找具有正确参数的对象的代码出错

查找具有正确参数的对象的代码出错

幕布斯6054654 2023-04-26 14:26:03
我有拍卖任务的代码。有 4 个类:Item,Bid,Auction,Person。 Item包含:Item 的名称, Item 的描述, Item 的minPrice , LinkedList of allBids 拍卖包含:LinkedList of allItems,LinkedList of bidings Bid包含:Bid 的价格, Person 类的 对象person包含:姓名投标人。所以在这次 sho brifing 之后我想总结一下我的问题。如果您有其他问题,我会提供我的类图。 https://drive.google.com/open?id=19mjayMIWFRNygvzP2xIGEWVzZcKNXIZDAuction类中有一个addBid(String itemName ,String nameOfBidder,long price) 方法,应该从投标人LinkedList中找到投标人(如果它不存在则创建它)然后根据 Item 的名称找到正确的,然后使用Item类中的addBid方法添加新的投标项对象。我的代码中有一个错误,当我试图根据它的itemName找出一个 Item 时,如果不存在具有这样名称的项目对象,它应该返回我NoSuchElementException 。但是每次我都没有通过这个检查,其实我不明白为什么。我试图通过使用不同类型的循环(例如 foreach)来解决我的问题。但是在几天内无法解决它。这是我从 Auction 类的 addBid 方法中获取的方法public void addBid(String ItemName, String nameOfBidder, long price) {        if(ItemName==null||nameOfBidder==null){            throw new NullPointerException("Name of the bidder cannot be null");        }        if(ItemName==""||nameOfBidder==""||price==0||price<0){            throw new IllegalArgumentException("Name of the bidder cannot be empty");        }        for(Person p:bidders) {            if (bidders.contains(p.getName()==nameOfBidder)) {                for (Item i:allItems ) {                    if(!(allItems.contains(i.getName()))){                        throw new NoSuchElementException("There is no such Item in the Auction");                    }                    if(allItems.contains(i.getName()==ItemName)){                        i.addBid(p,price);                    }                }            }            else {                Person person = new Person(nameOfBidder);                bidders.add(person);                for (Item i:allItems ) {                    if(!(allItems.contains(i.getName()))){                        throw new NoSuchElementException("There is no such Item in the Auction");                    }                    if(allItems.contains(i.getName()==ItemName)){                        i.addBid(person,price);                    }                }            }        }    }
查看完整描述

1 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

以下情况看起来不正确:


for(Person p:bidders) {

    // bidders holds Person objects and you are checking for boolean. p.getName() == nameOfBidder will evaluate to true. Perhaps you want to check for name equality first and then contains.

    if (bidders.contains(p.getName()==nameOfBidder)) {

   }

}


for (Item i:allItems ) {

    // allItems holds Item objects and you are checking by name string

    if(!(allItems.contains(i.getName()))){ 


    }

}

此外,可以简化初始空值和检查条件。


给你,大大简化的代码:


public void addBid(String itemName, String nameOfBidder, double price) {

    if (itemName == null || nameOfBidder == null) {

        throw new NullPointerException("Name of the bidder cannot be null");

    }

    if (itemName.equals("") || nameOfBidder.equals("") || price <= 0) {

        throw new IllegalArgumentException("Name of the bidder cannot be empty");

    }

    Optional<Person> person = bidders.stream().filter(e -> e.getName().equals(nameOfBidder)).findAny();

    Optional<Item> item = items.stream().filter(e -> e.getName().equals(itemName)).findAny();

    if (person.isPresent()) {

        checkItemAndAddBid(item, person.get(), price);

    } else {

        Person newPerson = new Person(nameOfBidder);

        bidders.add(newPerson);

        System.out.println("Creating a new bidder: "+newPerson.getName());

        checkItemAndAddBid(item, newPerson, price);

    }

}


public void checkItemAndAddBid(Optional<Item> item, Person person, double price) {

    if (!item.isPresent()) {

        throw new NoSuchElementException("There is no such Item in the Auction");

    } else {

        item.get().addBid(person, price);

    }

}


查看完整回答
反对 回复 2023-04-26
  • 1 回答
  • 0 关注
  • 87 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信