我有这堂课
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。尽管我确实知道这意味着什么,但是我不确定如何解决它。
答案 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);
}
此方法使用比较和排序的内置功能。并且通常更具可读性。