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

我有拍卖任务的代码。有 4 个类:ItemBidAuctionPerson。 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=19mjayMIWFRNygvzP2xIGEWVzZcKNXIZD

Auction类中有一个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);

                    }

                }

            }

        }


    }


幕布斯6054654
浏览 88回答 1
1回答

喵喵时光机

以下情况看起来不正确: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);    }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java