Dúvida exercício 3.2 apostila fj-22

4 respostas
M

Olá pessoal, estou com uma dúvida no exercício citado, que traz o seguinte:

1) Será que nosso programa funciona para um determinado dia que ocorrer apenas uma única negociação?
Vamos escrever o teste, e ver o que acontece:

public class TestaCandlestickFactoryComUmaNegociacaoApenas {
	
	public static void main(String[] args) {
		Calendar hoje = Calendar.getInstance();
		
		Negociacao negociacao1 = new Negociacao(40.5, 100, hoje);
		
		List<Negociacao> negociacoes = Arrays.asList(negociacao1);
		
		CandlestickFactory fabrica = new CandlestickFactory();
		
		Candlestick candle = fabrica.constroiCandleParaData(hoje, negociacoes);
		
		System.out.println(candle.getAbertura());
		System.out.println(candle.getFechamento());
		System.out.println(candle.getMinimo());
		System.out.println(candle.getMaximo());
		System.out.println(candle.getVolume());
	}

}

Ao final do exercício, o seguinte é afirmado: A saída deve indicar 40.5 como todos os valores, e 4050.0 como volume. Tudo parece bem?

Porém, pelas minhas contas, o volume deveria ser 40.5 mesmo…pois na fabrica (CandlestickFactory), o método constroiCandleParaData faz o seguinte:

for (Negociacao negociacao : negociacoes) {
			volume += negociacao.getPreco();

Como só tem uma negociação cujo preço é 40.5, o volume deveria ser o mesmo valor, não?

Alguém pode me ajudar aí a ver onde tô comendo mosca? :slight_smile:

4 Respostas

RodrigoKaos

Amigo, não olhei o exercício por tanto não sei o calculo para o volume, mas caso seja (40.5 * 100) = 4050, me parece correto a primeira vista já que são 100, caso fosse somente 1, então seria 40.5

freakazoid

Posta o método inteiro para que possamos ver aonde esta o erro.

M

Oi Rodrigo e freakazoid, desculpe, mas acho que não expliquei direito. Na verdade, o local onde é calculado o volume é só aqui mesmo:

volume += negociacao.getPreco();

Porém, foi aí que eu comi mosca. Quando o Rodrigo falou do precoquantidade é que me alertou. Na verdade, lá na classe Negociacao há um método getVolume() que retorna precoquantidade. Dentro da fábrica, então, ao invés de volume receber o somatório dos preços ele deveria receber o somatório de volumes (bem lógico né…ehehehe):

volume += negociacao.getVolume();

Fui verificar aqui na apostila da Caelum e vi que fui eu que na pressa passei direto, pois lá está correto :slight_smile:
Vlw pessoal, obrigado pelas respostas.

asousaj

Que bom que resolveu.
Coloque [resolvido] no titulo do tópico :wink:

Criado 30 de dezembro de 2013
Ultima resposta 30 de dez. de 2013
Respostas 4
Participantes 4