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.
*/
importjava.util.Scanner;publicclassDate{Scannerinput=newScanner(System.in);privateintdia;privateintmes;privateintano;publicDate(intd,intm,inta){intdia=d;intmes=m;intano=a;}publicvoidsetDia(intd){System.out.printf("Digite o dia: ");intdia=input.nextInt();dia=d;}publicintgetDia(){returndia;}publicvoidsetMes(intm){System.out.printf("Digite o mes: ");intmes=input.nextInt();mes=m;}publicintgetMes(){returnmes;}publicvoidsetAno(inta){System.out.printf("Digite o ano: ");intano=input.nextInt();ano=a;}publicintgetAno(){returnano;}publicintgetDisplayDate(){System.out.printf("\nDia de hoje: %d/%d/%d\n",getDia(),getMes(),getAno());intdisplayDate=input.nextInt();returndisplayDate;}}
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.
publicclassTesteDate{publicstaticvoidmain(String[]args){intdia=0;intmes=0;intano=0;Scanners=newScanner(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());Dated=newDate(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
Abraços x)
Paulo_Mour
Srs,
Agradeço muitissimo a ajuda. Preciso ler um pouco mais para assimilar melhor o conceito.
Valeu.
Paulo