Olá, Comunidade?!
Estou tentando criar um método chamado “close” á classe Leilao. Ele deve iterar pela coleção de lotes e imprimir detalhes de todos os lotes.
Estou usando o loop for-each. Qualquer lote que recebeu pelo menos um lance é considerado como vendido. Para lotes que foram vendidos,
os detalhes devem incluir o nome do arrematador vencedor e o valor do lance ganhador. Para lotes que não foram vendidos, imprima uma
mensagem que indique esses fato.
A classe Leilão
import java.util.ArrayList;
public class Leilao
{
private ArrayList<Lote> lotes;
private int proximoNumeroDeLote;
public Leilao()
{
lotes = new ArrayList<Lote>();
proximoNumeroDeLote = 1;
}
public void insiraLote(String descricao)
{
lotes.add(new Lote(proximoNumeroDeLote, descricao));
proximoNumeroDeLote++;
}
public void mostraLotes()
{
for(Lote lote : lotes)
{
System.out.println(lote.toString());
}
}
public void verificaLance(int numeroDoLote, Pessoa licitante, long valor)
{
Lote selecionaLote = getLote(numeroDoLote);
if(selecionaLote != null)
{
boolean sucesso = selecionaLote.verificaLance(new Lance(licitante, valor));
if(sucesso)
{
System.out.println("A proposta para o lote número " + numeroDoLote + " foi bem sucedida.");
}
else
{
// Report which bid is higher.
Lance maiorLance = selecionaLote.getMaiorLance();
System.out.println("Número do lote: " + numeroDoLote + " já tem um lance de: " + maiorLance.getValor());
}
}
}
public Lote getLote(int numeroDoLote)
{
if((numeroDoLote >= 1) && (numeroDoLote < proximoNumeroDeLote))
{
// The number seems to be reasonable.
Lote selecionaLote = lotes.get(numeroDoLote - 1);
// Include a confidence check to be sure we have the
// right lot.
if(selecionaLote.getNumero() != numeroDoLote)
{
System.out.println("Erro interno: Lote número " + selecionaLote.getNumero() + " foi devolvido ao invés de " + numeroDoLote);
// Don't return an invalid lot.
selecionaLote = null;
}
return selecionaLote;
}
else
{
System.out.println("Numero do lote: " + numeroDoLote + " não existe.");
return null;
}
}
/**
* Dúvida
* aqui quero imprimir os detalhes
* como nome do arrematador,
* vencedor do lance e o valor.
*
* Como faço para imprimir o nome do arrematador???
*/
public void close()
{
for(Lot lote : lots)
{
System.out.println("Lote.: " + lote + "Arrematador.: " );
}
}
}
A classe Lote
public class Lote
{
private final int numero;
private String descricao;
private Lance maiorLance;
public Lote(int numero, String descricao)
{
this.numero = numero;
this.descricao = descricao;
}
public boolean verificaLance(Lance lance)
{
if((maiorLance == null) || (lance.getValor() > maiorLance.getValor()))
{
// Este é o melhor lance até agora.
maiorLance = lance;
return true;
}
else
{
return false;
}
}
public String toString()
{
String detalhes = numero + ": " + descricao;
if(maiorLance != null)
{
detalhes += " Lance: " + maiorLance.getValor();
}
else
{
detalhes += " (Nenhum lance)";
}
return detalhes;
}
public int getNumero()
{
return numero;
}
public String getDescricao()
{
return descricao;
}
public Lance getMaiorLance()
{
return maiorLance;
}
}
A classe Pessoa
public class Pessoa
{
private final String nome;
public Pessoa(String nome)
{
this.nome = nome;
}
public String getNome()
{
return nome;
}
}
E a classe Lance
public class Lance
{
private final Pessoa licitante;
private final long valor;
public Lance(Pessoa licitante, long valor)
{
this.licitante = licitante;
this.valor = valor;
}
public Pessoa getLicitante()
{
return licitante;
}
public long getValor()
{
return valor;
}
}
Como imprimir o nome do arrematador na classe Leilão no método close???