Не уверен, как вернуть класс в Java - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть этот класс

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, и я продолжаю получать, что max не может быть разрешен для типа double.Хотя я понимаю, что это значит, но я не уверен, как это исправить.

Ответы [ 3 ]

0 голосов
/ 13 декабря 2018
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);

(Как всегда, у меня не так многокак скомпилировал этот код).

0 голосов
/ 13 декабря 2018

если вы «просто хотите исправить свой код», вы можете использовать что-то вроде

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);
}

. Этот подход использует встроенную функциональность сравнения и сортировки.и обычно более читабелен ..

0 голосов
/ 13 декабря 2018
public Bid getHighestBid() {
  Bid max = null;
  for(Bid bidValue :bids) {
    if(max==null || bidValue.getBidValue() > max.getBidValue()) 
    max = bidValue;
   }
  return max;
}

Вы должны сохранить объект Bid, а не только значение, а затем проверить его.

...