Não consigo resolver

Srs, bom dia. Relutei em enviar esta mensagem mas não consigo resolver este exercício. Poderiam me ajudar ? É o 3.15 do Java Como Programar 6. Eu quero que o programa solicite ao usuário que digite a dia, mês e ano e depois o programa exibe como dia/mes/ano. Desde já agradeço:

/**3.15 - Crie uma classe Date que inclui três informações como variáveis de instância - um mês(tipo int), um dia(tipo int) e um ano(tipo int). Sua classe deve ter um construtor que inicializa as três variáveis de instância e assumir que os valores fornecidos são corretos. Forneça um método set e um get para cada variável de instância. Forneça um método dysplayDate que exibe o mês, o dia e o ano separados por barras normais (/). Escreva um aplicativo de teste chamado DateTest que demonstra as capacidades da classe Date.
*/

import java.util.Scanner;

public class Date
{
	Scanner input = new Scanner(System.in);
	
	private int dia;
	private int mes;
	private int ano;
	
	public Date(int d, int m, int a)
	{
		int dia = d;
		int mes = m;
		int ano = a;
	}
	
	public void setDia(int d)
	{
		System.out.printf("Digite o dia: ");
		int dia = input.nextInt();
		dia = d;
	}
	
	public int getDia()
	{
		return dia;
	}
	
	public void setMes(int m)
	{
		System.out.printf("Digite o mes: ");
		int mes = input.nextInt();
		mes = m;
	}
	
	public int getMes()
	{
		return mes;
	}
	
	public void setAno(int a)
	{
		System.out.printf("Digite o ano: ");
		int ano = input.nextInt();
		ano = a;
	}
	
	public int getAno()
	{
		return ano;
	}
	
	public int getDisplayDate()
	{
		System.out.printf("\nDia de hoje: %d/%d/%d\n", getDia(), getMes(), getAno());
		int displayDate = input.nextInt();
		return displayDate;
	}
	
}

public class DateTest
{
	public static void main (String args [])
	{
		
		Date date = new Date (0,0,0);
		
				
		date.getDisplayDate();
		
	}

}

Vc está declarando variais locais dentro do construtor e dos métodos.
Vc precisa usara as variáveis de instância.

Seu construtor ficaria assim.

public Date(int d, int m, int a) { dia = d; mes = m; ano = a; }

Agora arrume os métodos e reveja os conceitos do livro para entender o que está acotnecendo.

Outra coisa, sua classe Date deve apenas guardar os valores e não solicir a entrada deles nos métodos set.

[]´s

Assim está melhor.

[code]public class Date
{

private int dia;  
private int mes;  
private int ano;  
  
public Date(int d, int m, int a)  
{  
    setDia(d);  
    setMes(m);  
    setAno(a);  
}  
  
public void setDia(int d)  
{  
    dia = d;  
}  
  
public int getDia()  
{  
    return dia;  
}  
  
public void setMes(int m)  
{  
    mes = m;  
}  
  
public int getMes()  
{  
    return mes;  
}  
  
public void setAno(int a)  
{  
    ano = a;  
}  
  
public int getAno()  
{  
    return ano;  
}  
  
public void displayDate()  
{  
    System.out.printf("%d/%d/%d", getDia(), getMes(), getAno());  
}  

}[/code]

Como falei, reveja os conceitos.

[]´s

Bom dia David,

Refiz o programa e ele rodou. O que gostaria é de que o usuário digitasse a data(dia/mes/ano), e isso eu não consegui. Não poderia fazê-lo na classe Date ?

Desde já agradeço pela atenção.

Abs,

Paulo

Oi Paulo,

Então, o propósito da classe Date é representar uma data. Ela não tem que se preocupar com o que o usuário vai digitar entendeu? Quem vai pegar os dados do usuário é outra classe, onde a lógica em si deve ser implementada. Pode ser uma classe chama TesteDate por exemplo.

[code]public class TesteDate {

public static void main( String[] args ) {

    int dia = 0;
    int mes = 0;
    int ano = 0;

    Scanner s = new Scanner( System.in );

    System.out.println( "Digite o dia: " );        
    dia = Integer.parseInt( s.nextLine() );

    System.out.println( "Digite o mês: " );
    mes = Integer.parseInt( s.nextLine() );

    System.out.println( "Digite o ano: " );
    ano = Integer.parseInt( s.nextLine() );

    Date d = new Date( dia, mes, ano );
    System.out.println( "A data é: " + d.displayDate() );

}

}[/code]

[]'s

[quote=davidbuzatto]Vc está declarando variais locais dentro do construtor e dos métodos.
Vc precisa usara as variáveis de instância.

Seu construtor ficaria assim.

public Date(int d, int m, int a) { dia = d; mes = m; ano = a; }

Agora arrume os métodos e reveja os conceitos do livro para entender o que está acotnecendo.

Outra coisa, sua classe Date deve apenas guardar os valores e não solicir a entrada deles nos métodos set.

[]´s

[/quote]

Lembrando que é uma boa ideia usar o this. Ficando mais ou menos assim:

public Date(int d, int m, int a) { this.dia = d; this. mes = m; this. ano = a; }

(:

[quote=franciscossouza]

public Date(int d, int m, int a) { this.dia = d; this. mes = m; this. ano = a; }[/quote]

Eu particularmente uso o this apenas quando ocorre shadowing, por exemplo:

public Date( int dia, int mes, int ano ) { this.dia = dia; this.mes = mes; this.ano = ano; }

Como as variáveis no exemplo do Paulo tem nomes diferentes, eu não acredito que haja utilidade, apenas se o objetivo for deixar o código mais legível. Se estiver usando uma IDE, normalmente variáveis de instância ficam de outra cor. No NetBeans é verde. Enfim, isso vai do gosto do freguês.

[]´s

O objetivo é exatamente esse: legibilidade. É uma boa ideia sempre usar o this para deixar sempre bem claro de onde você está obtendo os seus valores (: É só uma prática legal com a qual eu concordo :stuck_out_tongue:

Abraços x)

Srs,
Agradeço muitissimo a ajuda. Preciso ler um pouco mais para assimilar melhor o conceito.
Valeu.
Paulo