Exercicios com data - FJ16 caelum

9 respostas
Elizeu_Santos

ola amigos da rede globo...
bom, estou fazendo uns exercícios aqui da FJ16... vou dar a descrição aqui pra vocês.

Reescreva o toString da classe Negocio e da Candlestick. Faça com que a data seja corretamente visuali-
zada, usando para isso o método data.get(Calendar.DATE) e as outras constantes.
Ao imprimir um candlestick, por exemplo, a saída deve ser algo como segue:
[Abertura 40.5, Fechamento 42.3, Mínima 39.8, Máxima 45.0, Volume 145234.20, Data 12/07/2008]
Para reescrever um método e tirar proveito do Eclipse, a maneira mais direta é de dentro da classe Negocio,
fora de qualquer método, pressionar ctrl+espaço. Aparecerá uma lista com todas as opções de métodos que
você pode reescrever. Escolha o toString, e ao pressionar enter o esqueleto da reescrita será montado.

reescrevi o toString da Candlestick, a classe esta assim:

package br.com.caelum.argentum;

import java.util.Calendar;

public class Candlestick {

	private final double abertura;
	private final double fechamento;
	private final double minimo;
	private final double maximo;
	private final double volume;
	private final Calendar data;

	public Candlestick(double abertura, double fechamento, double minimo,
			double maximo, double volume, Calendar data) {
		this.abertura = abertura;
		this.fechamento = fechamento;
		this.minimo = minimo;
		this.maximo = maximo;
		this.volume = volume;
		this.data = data;
	}

	public double getAbertura() {
		return abertura;
	}

	public double getFechamento() {
		return fechamento;
	}

	public double getMinimo() {
		return minimo;
	}

	public double getMaximo() {
		return maximo;
	}

	public double getVolume() {
		return volume;
	}

	public Calendar getData() {
		return data;
	}

	public boolean isAlta() {
		return this.abertura < this.fechamento;
	}

	public boolean isBaixa() {
		return this.abertura > this.fechamento;
	}

	public String toString() {
		return "\nAbertura: " + abertura + ", Fechamento: " + fechamento
				+ ", Minima: " + minimo + ", Maximo: " + maximo + ", Volume: "
				+ volume + ", Data: " + data.get(Calendar.DATE);
	}
}

porem não sei o que fazer com a data. alguém pode auxiliar?

e o meu toString atual? é isso mesmo ou existe uma forma menos "longa" de fazer isto? grato

9 Respostas

Elizeu_Santos

reescrevi assim agora

public String toString() { return "\nAbertura: " + abertura + ", Fechamento: " + fechamento + ", Minima: " + minimo + ", Maximo: " + maximo + ", Volume: " + volume + ", Data: " + data.get(Calendar.DATE) + "/" + (data.get(Calendar.MONTH)+1) + "/" + data.get(Calendar.YEAR); }

mais ainda falta um 0 na frente do mês, e este “0” não pode existir se o mês for maior que 9. te me parecendo muito longo o código também…

renamed

Isso poderia ser facilmente em três linhas:

Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
System.out.println(sdf.format(c.getTime()));

Mas como vc quer usar constantes.

int dia = data.get(Calendar.DATE);
int mes = (data.get(Calendar.MONTH)+1);
		
return "\nAbertura: " + abertura + ", Fechamento: " + fechamento
	+ ", Minima: " + minimo + ", Maximo: " + maximo + ", Volume: "
	+ volume + ", Data: " + (dia < 10 ? "0" + dia : dia) + "/" + (mes < 10 ? "0" + mes : mes)  + "/" + data.get(Calendar.YEAR);
Elizeu_Santos

grato!

Paulo_Silveira

Existe uma forma bem menos longa de fazer isso, utilizando o metodo estatico String.format, e passando mascara para o caso da data.

A

Paulo,

Fiz o código conforme abaixo, não sei se há uma maneira mais elegante de efetuar o mesmo.

Tentei colocar o código do String.format direto no return porém não consegui concatenar os doubles com o format date, gerou um erro, sendo assim fiz o String.format em duas variáveis
com o return concatenando-as.

Se tiver alguma dica ficarei feliz em ouvi-la.

Obrigado.

package br.com.caelum.argentum;

import java.util.Calendar;

public final class Candlestick {

	private double abertura;
	private double fechamento;
	private double minimo;
	private double maximo;
	private double volume;
	private Calendar data;
	
	public Candlestick(double abertura, double fechamento, double minimo,
			double maximo, double volume, Calendar data) {
		this.abertura = abertura;
		this.fechamento = fechamento;
		this.minimo = minimo;
		this.maximo = maximo;
		this.volume = volume;
		this.data = data;
	}

	public double getAbertura() {
		return abertura;
	}

	public double getFechamento() {
		return fechamento;
	}

	public double getMinimo() {
		return minimo;
	}

	public double getMaximo() {
		return maximo;
	}

	public double getVolume() {
		return volume;
	}

	public Calendar getData() {
		return data;
	}
	
	public boolean isAlta(){
		
		return this.abertura < this.fechamento;
		
	}
	
	public boolean isBaixa(){
		
		return this.abertura > this.fechamento;
		
	}
	
	public String toString() {
		
		String dt = String.format("Data: %1$td %1$tB %1$tY", data);
		String ab = String.format("Abertura: %.2f, Fechamento: %.2f, Mínima: %.2f Máxima: %.2f, Volume: %.2f", abertura, fechamento, minimo, maximo, volume);
		
		return (ab+" "+dt);
	} 
}
rafaelshock

Estou com duvida nesse exercício! alguém pode me ajudar sou leigo nessa situação aqui!!!

package br.com.caelum.argetum;

import java.util.Calendar;

public final class Candlestick {
	private final double abertura;
	private final double fechamento;
	private final double minimo;
	private final double maximo;
	private final double volume;
	private final Calendar data;
	
	int dia = data.get(Calendar.DATE);
	int mes = (data.get(Calendar.MONTH)+1);
	
	public Candlestick(double abertura, double fechamento, double minimo,
			double maximo, double volume, Calendar data) {
		super();
		this.abertura = abertura;
		this.fechamento = fechamento;
		this.minimo = minimo;
		this.maximo = maximo;
		this.volume = volume;
		this.data = data;
		
				
	}
	
	
	public double getAbertura() {
		return abertura;
	}
	public double getFechamento() {
		return fechamento;
	}
	public double getMinimo() {
		return minimo;
	}
	public double getMaximo() {
		return maximo;
	}
	public double getVolume() {
		return volume;
	}
	public Calendar getData() {
		return data;
	}
	
	public boolean islista(){
		return this.abertura <this.fechamento;
	 }
	
	public boolean isBaixa(){
		return this.abertura <this.fechamento;
	}
	
	
	public String toString(){
		return "/nAbertura: " + abertura + ", Fechamento: " 
	+ fechamento + ", Minima: " + minimo + ", Maximo: " + maximo + ", Volume: " 
	+ volume + ", Data: " + (dia <10 ? "0" + dia : dia) + "/" + (mes < 10 ? "0" + mes : mes)
	+ "/" + data.get(Calendar.YEAR);
	}
	
}

está dando erro nessas duas linhas aqui

int dia = data.get(Calendar.DATE);
int mes = (data.get(Calendar.MONTH)+1);

erro

The blank final field data may not have been initialized

Obrigado!

E

Você sabe por que é que você escreveu “final” nos atributos da classe?

private final double abertura;  
    private final double fechamento;  
    private final double minimo;  
    private final double maximo;  
    private final double volume;  
    private final Calendar data;
rafaelshock

sim sim… Final para aquela parada de imutavel no caso da classe ela não pode ser herdada!

rafaelshock

Galera enfim consegui uma ajuda da Sarah Romeu e consegui fazer!

@Override
	public String toString() {
		SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
		return "dataformatada:  "+ formato.format(this.data.getTime());
	}
Criado 8 de março de 2011
Ultima resposta 5 de dez. de 2012
Respostas 9
Participantes 6