public class UberUM {
private Map<String, Veiculo> veiculos; // Usa-se Map em vez de Array já que será útil ter a associação
// matricula->veiculo nas próximas questões
public UberUM(Set<Map.Entry<String, Veiculo>> info) {
this.veiculos = new HashMap<>();
for (Map.Entry<String, Veiculo> entry : info) {
veiculos.put(entry.getKey(), entry.getValue().clone());
}
}
}
public abstract class Veiculo implements Comparable<Veiculo>, Serializable {
private String matricula;
private String marca;
private String modelo;
private double precokm;
private List<Viagem> viagens;
// List em vez de Set já que temos que manter a ordem para retornar a viagem mais antiga na questão 3
// List devia ser LinkedList para assegurar ordem mesmo quando viagens são removidas
// Pode ser ArrayList caso se assuma que viagens não serão removidas
...
}
(Grandes chances de ter erros)
public class UberUM {
...
private Map<String, Veiculo> veiculos;
...
public Viagem viagemMaisAntiga(String matricula) throws VeiculoNotFoundException {
Veiculo veiculo = this.veiculos.get(matricula);
if (veiculo == null) {
throw new VeiculoNotFoundException();
}
return veiculo.getViagemMaisAntiga();
}
}
public abstract class Veiculo implements Comparable<Veiculo>, Serializable {
...
private List<Viagem> viagens;
...
public Viagem getViagemMaisAntiga() {
List<Viagem> viagens = veiculo.getViagens();
if (viagens.isEmpty()) {
throw new VeiculoNoViagensFoundException();
}
return viagens.get(0).clone(); // A viagem mais antiga será a primeira adicionada (Ver questão 1)
}
}
public class VeiculoNotFoundException extends RuntimeException {
public VeiculoNotFoundException() {
super("Veiculo not found");
}
}
public class VeiculoNoViagensFoundException extends RuntimeException {
public VeiculoNoViagensFoundException() {
super("Veiculo has no viagens made");
}
}
public class UberUM {
private Map<String, Veiculo> veiculos;
...
public void adicionaViagem(String matricula, String origem, String destino, float distancia) throws VeiculoNotFoundException {
Veiculo veiculo = this.veiculos.get(matricula);
if (veiculo == null) {
throw new VeiculoNotFoundException();
}
veiculo.adicionaViagem(origem, destino, distancia);
}
}
public abstract class Veiculo implements Comparable<Veiculo>, Serializable {
...
private List<Viagem> viagens;
public abstract float custoViagem(float distancia);
...
public void adicionaViagem(String origem, String destino, float distancia) {
float custo = custoViagem(distancia);
Viagem viagem = new Viagem(origem, destino, distancia, custo);
this.viagens.add(viagem);
}
}