Ola Galera tive uma prova ontem bem interresante sobre java, detalhe eu a fiz longe de computador, longe de IDE, longe de compilador, ou seja, no maozão.
Quando cheguei em casa tentei refazer, funciona mas eu sei que pode ser melhor,
esse o código:
import java.util.Scanner;
public class Pessoa{
private String nome;
private String []dataNascimento;
private String []unidade = {"zero","um","dois","tres","quatro","cinco","seis","sete","oito","nove"};
private String []casaDez = {"dez","onze","doze","treze","quatorze","quinze","dezesseis","dezessete","dezoito","dezenove"};
private String []dezenas = {"vinte","trinta","quarenta","cinquenta","sessenta","setenta","oitenta","noventa"};
private int idade;
public Pessoa(String nome, String dtNasc){
this.nome = nome;
this.dataNascimento = dtNasc.split("/");
}
public int calculaIdade(String dataAtual){
String []dtAtual = dataAtual.split("/");
int diaA = Integer.parseInt(dtAtual[0]);
int mesA = Integer.parseInt(dtAtual[1]);
int anoA = Integer.parseInt(dtAtual[2]);
int diaN = Integer.parseInt(dataNascimento[0]);
int mesN = Integer.parseInt(dataNascimento[1]);
int anoN = Integer.parseInt(dataNascimento[2]);
if (diaN >= diaA && mesN >= mesA)
idade = anoA - anoN - 1;
else
idade = anoA - anoN;
return idade;
}
public String mostraIdadeExt(){
if (idade >= 0 && idade <= 9)
return unidade[idade];
if (idade >= 10 && idade <= 19)
return casaDez[idade-10];
if (idade >= 20 && idade <= 99){
int tempId = idade/10;
int tempUn = idade-(tempId*10);
if (idade % 10 == 0)
return dezenas[tempId-2];
else
return dezenas[tempId-2] + " e " + unidade[tempUn];
}
return "";
}
public static void main(String []args){
Scanner scan = new Scanner(System.in);
System.out.println("Informe o nome da pessoa: ");
String nome = scan.nextLine();
System.out.println("Informe a data de Nascimento: ");
String dtN = scan.nextLine();
System.out.println("Informe a data atual");
String dtA = scan.nextLine();
Pessoa p = new Pessoa(nome, dtN);
System.out.println("Idade: " +p.calculaIdade(dtA) + " ( "+p.mostraIdadeExt()+" anos )");
}
}
Alguem poderia me ajudar a melhorá-lo?
[color=darkred][b]Talvez uma malhora poderia ser feita com o uso da classe Date do pacote java.util
Tbm achei interessante seu programa…
A sua idéia de criar um array de Strings com os nomes foi bastante criativa…
oK,
[/b][/color]
[quote=betoecomp][color=darkred][b]Talvez uma malhora poderia ser feita com o uso da classe Date do pacote java.util
Tbm achei interessante seu programa…
A sua idéia de criar um array de Strings com os nomes foi bastante criativa…
oK,
[/b][/color][/quote]
Eai Beto, pode deixar na proxima versão eu vou colocar sua sugestão, sobre o uso de arrays é bem interresante porque eu utilizo o indice para recuperar o nome por extenso da idade,
será que eu poderia utilizar Collections?
Se sim acho que o desempenho não seria o mesmo né. valeu
[color=darkblue][b]Talvez uma Hashtable ou Map…
Vc colocava uma String e um inteiro como chave…
Hashtable<Integer, String> numeros = new Hashtable();
numeros.put(10, "dez");
String s = numeros.get(10); // o valor de s seria "dez"
Espero ter ajudado…
[/b][/color]
Vou passar o fim de semana tentando fazer.
Valeu!
Eu achei interessante esta questão, por isso resolvi fazer outra versão utilizando as classes Calendar e GregorianCalendar. Acho que está versão tem algumas melhorias como:
- o cálculo da idade é feito pelo método add da classe Calendar;
- a data atual é obtida do sistema;
- utilização de enum;
- o método toString foi implementado.
Ainda pode ser melhorado através do tratamento de exceções.
Espero ter ajudado!
Valeu!!!
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Scanner;
public class Pessoa {
private int idade;
private String nome;
GregorianCalendar dtNasc;
Pessoa(String nome, int ano, int mes, int dia) {
this.nome = nome;
this.dtNasc = new GregorianCalendar(ano, mes - 1, dia);
GregorianCalendar hoje = new GregorianCalendar();
hoje.add(Calendar.DAY_OF_MONTH, -dtNasc.get(Calendar.DAY_OF_MONTH));
hoje.add(Calendar.MONTH, -dtNasc.get(Calendar.MONTH));
hoje.add(Calendar.YEAR, -dtNasc.get(Calendar.YEAR));
this.idade = hoje.get(Calendar.YEAR);
}
enum NumerosDe0A19 {
zero, um, dois, tres, quatro, cinco, seis, sete, oito, nove, dez, onze, doze, treze, quatorze, quinze, dezesseis, dezessete, dezoito, dezenove
};
enum DezenasDe20A90 {
vinte, trinta, quarenta, cinquenta, sessenta, oitenta, noventa
};
public void mostraIdadeExt() {
System.out.println("\nOlá, " + nome + "!");
System.out.print("Você tem ");
if (idade >= 0 && idade <= 19) {
System.out.print(Pessoa.NumerosDe0A19.values()[idade]);
} else {
String idStr = Integer.toString(idade);
int dezena = Integer.parseInt(idStr.substring(0, 1));
int unidade = Integer.parseInt(idStr.substring(1, 2));
System.out.print(Pessoa.DezenasDe20A90.values()[dezena - 2]);
if (unidade != 0) {
System.out
.print(" e " + Pessoa.NumerosDe0A19.values()[unidade]);
}
}
System.out.println(" anos.");
}
public String toString() {
mostraIdadeExt();
return "";
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Digite seu nome: ");
String nome = input.next();
System.out.print("Digite a data do seu nascimento (dd/mm/aaaa): ");
String dtNasc = input.next();
int dia = Integer.parseInt(dtNasc.split("/")[0]);
int mes = Integer.parseInt(dtNasc.split("/")[1]);
int ano = Integer.parseInt(dtNasc.split("/")[2]);
Pessoa p = new Pessoa(nome, ano, mes, dia);
System.out.println(p);
}
}
Valeu Java Man, seu codigo esta bem legal, existem algumas coisinhas que eu não conheço como o enum… mas eu me comprometo a descobrir como funciona…
Valeu