Criei um metodo displayDate para exibir o dia, mes e ano separados por barras normais:
public void displayDate( int dtDate )
{
dtDate = ((datDia)/(datMes)/(datAno));
}
ele compila, porém na hora de executar aparece o seguinte erro:
[quote]C:>java DateTest
Digite o dia: 12
Digite o mes: 10
Digite o ano: 1949
A data correta e: 0Exception in thread “main” java.util.MissingFormatArgumentExc
eption: Format specifier ‘d’
at java.util.Formatter.format(Formatter.java:2429)
at java.io.PrintStream.format(PrintStream.java:899)
at java.io.PrintStream.printf(PrintStream.java:800)
at DateTest.main(DateTest.java:29)[/quote]
aonde está o erro?
e como faço para solicionar?[/quote]
Pra te falar a verdade, não entendi absolutamente nada do que esse metodo seu está fazendo… qual foi sua intenção colocando essas barras entre as variaveis? E porque atribuiu o “resultado” à variavel dtDate sendo que você não faz mais nada com ela abaixo? E afinal, o que significa a variavel dtDate?
Se o que você quer é mostrar a data como uma String formatada, dê uma olhada na classe SimpleDateFormat e use a classe Date para representar datas.
kra não recomendo o uso da classe Date vc pode reparar que tem muito metodo deprecado(deprecated) na documentação da classe use a classe Calendar e como no post anterior não entendi muito o objetivo disso. Uma metodo q recebe um valor inteiro e atribui a mesma variavel q recebeu??? Explique-se melhor.
Vou explicar melhor:
preciso criar uma classe Date que tenha 3 variáveis de instancia:
mês, dia e ano (todas tipo int), essa classe deve ter um construtor que inicializa as 3 variaveis de instancia.
Fazer um metodo set e um get para cada variavel de instancia.
Fazer um metodo displayDate (citado abaixo) que exiba o mes, dia e ano separados por barras normais (/); e por fim uma classe DateTest para testar a classe Date.
Vou colar as duas classes:
[quote] public class Date
{
private int datDia;
private int datMes;
private int datAno;
private int dtDate;
public Date( int dia, int mes, int ano )
{
datDia = dia;
datMes = mes;
datAno = ano;
}
public void setDatDia( int dia )
{
datDia = dia;
}
public void setDatMes( int mes )
{
datMes = mes;
}
public void setDatAno( int ano )
{
datAno = ano;
}
public int getDatDia()
{
return datDia;
}
public int getDatMes()
{
return datMes;
}
public int getDatAno()
{
return datAno;
}
public void displayDate( int dtDate )
{
dtDate = ((datDia)/(datMes)/(datAno));
}
public int getDisplayDate()
{
return dtDate;
}
}[/quote]
[quote] import java.util.Scanner;
public class DateTest
{
public static void main( String args[] )
{
int dtDia;
int dtMes;
int dtAno;
Date date = new Date( 12, 02, 2006 );
Scanner input = new Scanner( System.in );
System.out.print( "Digite o dia: " );
dtDia = input.nextInt();
System.out.print( "Digite o mes: " );
dtMes = input.nextInt();
System.out.print( "Digite o ano: " );
dtAno = input.nextInt();
//date.displayDate( dtDia, dtMes, dtAno );
date.setDatDia( date.getDatDia() );
date.setDatMes( date.getDatMes() );
date.setDatAno( date.getDatAno() );
System.out.printf( "\nA data correta e: %d%d%d\n", dtDia/dtMes/dtAno );
}
public String displayDate(){
return datDia+"/"+datMes+"/"+datAno;
}
Na realidade a classe Date em si não está marcada como deprecated, e ainda é a classe recomendada para representação de datas, os métodos deprecated da classe são devidos as duas funcionalidades que ela tinha inicialmente, de manipular os campos da data individualmente e de formatar a data, essa duas funcionalidades foram transferidas para a classe Calendar e DateFormat, mas somente essas duas funcionalidades, não a de representar a data, o que não é a função de Calendar.
A data correta e: 12/2/2006 Exception in thread “main” java.util.MissingFormatArgumentException: Format specifier ‘s’
at java.util.Formatter.format(Formatter.java:2429)
at java.io.PrintStream.format(PrintStream.java:899)
at java.io.PrintStream.printf(PrintStream.java:800)
at DateTest.main(DateTest.java:9)[/quote]
seria o erro causado pela declaração int das variáveis datDia, datMes e datAno?
[quote]public class Date
{
private int datDia;
private int datMes;
private int datAno;
public Date( int dia, int mes, int ano )
{
datDia = dia;
datMes = mes;
datAno = ano;
}
public void setDatDia( int dia )
{
datDia = dia;
}
public void setDatMes( int mes )
{
datMes = mes;
}
public void setDatAno( int ano )
{
datAno = ano;
}
public int getDatDia()
{
return datDia;
}
public int getDatMes()
{
return datMes;
}
public int getDatAno()
{
return datAno;
}
public String displayDate()
{
return datDia+"/"+datMes+"/"+datAno;
}
}[/quote]
class DateTest
[quote]public class DateTest
{
public static void main( String args[] )
{
Date date = new Date( 12, 02, 2006 );
System.out.printf( "\nA data correta e: %s %s %s\n", date.displayDate() );
}
}[/quote]
é um exercicio de um livro, ele pede pra criar as classes…
System.out.printf( "\nA data correta e: %s %s %s\n", date.displayDate() );
em Java2
System.out.println( "A data correta e: "+date.displayDate() );
eu aqui não tenho o Java5 pra poder testar o seu printf, mas o lance eh q vc esta tentando mostrar 3 String usando %s 3 vezes…porem o seu metodo displayDate() soh retorna 1 String…raciocinando dessa forma o q vc pode tentar tb eh:
System.out.printf( "\nA data correta e: %s\n", date.displayDate() );
lembrando q isso eu nao consigo testar aqui, mas pelo seu erro, deve funcionar…