不确定如何在Java中返回类

时间:2018-12-12 23:21:03

标签: java class arraylist

我有这堂课

public class Bid {
private User buyer;
private double bidValue;

public Bid(User buyer, double bidValue) {
  if(buyer == null || bidValue <1) {
  throw new IllegalArgumentException();
}

this.buyer = buyer;
this.bidValue = bidValue;
}

public User getBuyer() {
 return buyer;
}


public double getBidValue() {
return bidValue;
}

public String toString() {
 return this.buyer + " bid £" + this.bidValue;
 }

}

和这个班

import java.util.*;

public class Product {
private int productId;
private String productName;
private double reservedPrice;
private List<Bid> bids = null;

public Product(int productId, String productName, double reservedPrice) {
  this.productId = productId;
  this.productName = productName;
  this.reservedPrice = reservedPrice;
  this.bids = new ArrayList<Bid>();
}


public Bid getHighestBid() {
  double max = 0.0;
  for(Bid bidValue :bids) {
    if(bidValue.getBidValue() > max) 
    max = bidValue.getBidValue();
   }
  return null;
 }


}

在getHighestBid方法中,我试图确定用户已设置的最高唯一出价,但是由于返回类型必须为Bid,因此我不确定如何做到这一点,而且我一直在设法避免将最大值设为键入double。尽管我确实知道这意味着什么,但是我不确定如何解决它。

3 个答案:

答案 0 :(得分:1)

public Bid getHighestBid() {
  Bid max = null;
  for(Bid bidValue :bids) {
    if(max==null || bidValue.getBidValue() > max.getBidValue()) 
    max = bidValue;
   }
  return max;
}

您必须存储Bid对象,而不仅是值,然后再对其进行检查。

答案 1 :(得分:0)

public Bid getHighestBid() {
    double max = Double.NEGATIVE_INFINITY;
    Bid maxBid = null;
    for (Bid bid : bids) {
        double bidValue = bidValue.getBidValue();
        if (bidValue > max) {
            max = bidValue;
            maxBid = bid;
        }
     }
     return maxBid;
 }

注意:

即使在构造函数中受限制,也可能允许使用负值。严格来说,这些可能全是NaN

double max = 0.0;

每个出价都是一个出价,而不是出价值。

for(Bid bidValue :bids) {

只需保留最高出价对象及其值即可。 (您每次都可以得到该值,但如果没有,则看起来更干净。)

流版本类似于:

return bids.stream()
    .max(Comparator.comparingDouble(Bid::getBidValue)).orElse(null);

(和往常一样,我还没有编译这段代码)。

答案 2 :(得分:0)

如果您“只是想修改代码”,则可以使用

public Bid getHighestBid() {
  double max = 0.0;
  Bid maxBid = null;
  for(Bid bid : bids) {
    if(bid.getBidValue() > max) 
    max = bid.getBidValue();
    maxBid = bid;
  }
  return maxBid;
}

但是您应该更进一步,并实现Comparable出价接口:

public class Bid implements Comparable<Bid> {
   ...    
   int compareTo (Bid other) {
      // return -1,0 or 1 depending on comparison of bid Values of this and other
   }

}

然后,在您的Product类中,您可以

public Bid getHighestBid() {
  return Collection.max(bids);
}

此方法使用比较和排序的内置功能。并且通常更具可读性。