Estou fazendo um curso de JAVA e me deparei com a seguinte questão:
Crie um programa que leia e imprima valores inteiros entre 0 e 1000 por extenso. Por exemplo, se o usuário digitar 132, o programa deverá exibir: ?Cento e trinta e dois?. DICA: utilizem os operadores % e / para isolar os dígitos dos números.
Não sei muito ao certo como fazer esse programa. Porém não gostaria dele pronto, se possível me dêem uma ideia de como fazê-lo!
desculpa ai, editei meu post porque vi que o que eu falei não tinha nada a ver
abraço!
drsmachado
O objetivo é obter o valor relativo de cada um dos dígitos do número, como a tia da 1ª série pedia…
Ex.: 123 = cem + vinte + três…
A dica é a chave para resolver isto.
Ex.:
123 / 10 = 12 e resto 3. o resto irá dar um número flutuante se for dividido por 10, logo, já se tem o primeiro valor que é três.
12 / 10 = 1 e resto 2. Como houve uma segunda divisão, multiplica-se este resto por 10 e obtém-se o segundo valor, no caso, vinte.
1 é menor que 10, mas houve 2 divisões para encontrá-lo, então, multiplica-se ele por 10 e depois, por 10 novamente, temos cem ou cento.
Juntando as strings:
cento e vinte e três.
Conseguiu captar?
Arizoide
Opa, consegui entender sim.]
Vou tentar fazer aqui, qualquer coisa peço ajuda novamente.
Muito Obrigado!
Arizoide
Resolvi assim:
Não sei se está nas melhores formas, mais deu certo.
importjavax.swing.JOptionPane;publicclassExercicio6{privateStringunidade,dezena,centena,milhar;publicvoidescreveUnidade(intunidade){switch(unidade){case1:this.unidade=" um";break;case2:this.unidade=" dois";break;case3:this.unidade=" três";break;case4:this.unidade=" quatro";break;case5:this.unidade=" cinco";break;case6:this.unidade=" seis";break;case7:this.unidade=" sete";break;case8:this.unidade=" oito";break;case9:this.unidade=" nove";break;}}publicvoidescreveDezena(intdezena){switch(dezena){case1:this.dezena=" dez";break;case2:this.dezena=" vinte";break;case3:this.dezena=" trinta";break;case4:this.dezena=" quarenta";break;case5:this.dezena=" cinquenta";break;case6:this.dezena=" sessenta";break;case7:this.dezena=" setenta";break;case8:this.dezena=" oitenta";break;case9:this.dezena=" noventa";break;}}publicvoidescreveCentena(intcentena){switch(centena){case1:this.centena=" cento";break;case2:this.centena=" duzentos";break;case3:this.centena=" trezentos";break;case4:this.centena=" quatrocentos";break;case5:this.centena=" quinhentos";break;case6:this.centena=" seissentos";break;case7:this.centena=" setecentos";break;case8:this.centena=" oitocentos";break;case9:this.centena=" novecentos";break;}}publicvoidrecuperaString(inta){if(a==0){JOptionPane.showMessageDialog(null,"Zero.");}elseif(a<10){escreveUnidade(a);JOptionPane.showMessageDialog(null,"Número = "+unidade);}elseif(a<100){intu=a%10;intd=a/10;escreveDezena(d);escreveUnidade(u);Stringnum=this.dezena+this.unidade;JOptionPane.showMessageDialog(null,"Número = "+num);}elseif(a<1000){intu=a%10;intd=(a/10)%10;intc=(a/10)/10;escreveCentena(c);escreveDezena(d);escreveUnidade(u);Stringnum=this.centena+"e"+this.dezena+"e"+this.unidade;JOptionPane.showMessageDialog(null,"Número = "+num);}elseif(a==1000){JOptionPane.showMessageDialog(null,"Mil.");}}publicstaticvoidmain(Stringargs[]){Exercicio6ex=newExercicio6();ex.recuperaString(Integer.parseInt(JOptionPane.showInputDialog("Digite um valor entre 0 e 1000.")));}}
drsmachado
Sempre digo que a melhor solução é a que resolve…
Parabéns cara, pegou a idéia e foi atrás.
Esse é o espírito…
Muito boa essa solução, entendi tudinho… foi a melhor solução que achei até agora !!!
T
thejohns
Com a utilização de vetores armazenando os valores de centena,dezenas etc, deixaria menos extenso o código e daria para ultilizar apenas um switch/case.
drsmachado
Com a utilização de ArrayList mais ainda…
Arizoide
Sim, imaginei que com a estrutura de uma ArrayList ficaria bem melhor.
Porém como ainda sou iniciante ( :() eu precisava resolver esse problema com o que eu ‘tinha nas mangas’…
Quem sabe mais pra frente já não consiga postar o código otimizado com ArrayList :D.
Vlww galera pelas repsostas.
alerson
GOATARIA DE SABER SE EXITE ALGUM TIPO DE METODO PRONTO NO JAVA PARA FAZER UMA BUSCA EM UMA MATRIZ, OU SE SEMPRE TEREI QUE PERCORRER ELA INTERA MESMO PRA ENCONTRAR O SUPOSTO VALOR.
DESDE JA AGRADEÇO !!!
drsmachado
Se você está programando a matriz, dependendo o nº de lados, você pode usar HashMap no lugar da matriz, aí procura direto pela key.