Não consigo resolver

8 respostas
Paulo_Mour

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();
		
	}

}

8 Respostas

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

davidbuzatto

Assim está melhor.

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());  
    }  
      
}

Como falei, reveja os conceitos.

[]´s

Paulo_Mour

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

davidbuzatto

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.

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() );

    }
}

[]'s

franciscossouza

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

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; }

(:

davidbuzatto

franciscossouza:

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

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

franciscossouza

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)

Paulo_Mour

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

Criado 24 de outubro de 2009
Ultima resposta 26 de out. de 2009
Respostas 8
Participantes 3