Exercício JAVA [RESOLVIDO]

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!

Obrigado.

desculpa ai, editei meu post porque vi que o que eu falei não tinha nada a ver

abraço!

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?

Opa, consegui entender sim.]

Vou tentar fazer aqui, qualquer coisa peço ajuda novamente.

Muito Obrigado! :slight_smile:

Resolvi assim:

Não sei se está nas melhores formas, mais deu certo.

[code]import javax.swing.JOptionPane;

public class Exercicio6 {
private String unidade, dezena, centena, milhar;

public void escreveUnidade(int unidade){
	switch (unidade){
		case 1: this.unidade = " um"; break;
		case 2: this.unidade = " dois"; break;
		case 3: this.unidade = " três"; break;
		case 4: this.unidade = " quatro"; break;
		case 5: this.unidade = " cinco"; break;
		case 6: this.unidade = " seis"; break;
		case 7: this.unidade = " sete"; break;
		case 8: this.unidade = " oito"; break;
		case 9: this.unidade = " nove"; break;
		
	}
}

public void escreveDezena(int dezena){
	switch (dezena){
		case 1: this.dezena = " dez"; break;
		case 2: this.dezena = " vinte"; break;
		case 3: this.dezena = " trinta"; break;
		case 4: this.dezena = " quarenta"; break;
		case 5: this.dezena = " cinquenta"; break;
		case 6: this.dezena = " sessenta"; break;
		case 7: this.dezena = " setenta"; break;
		case 8: this.dezena = " oitenta"; break;
		case 9: this.dezena = " noventa"; break;
	}
}

public void escreveCentena(int centena){
	switch(centena){
		case 1: this.centena = " cento"; break;
		case 2: this.centena = " duzentos"; break;
		case 3: this.centena = " trezentos"; break;
		case 4: this.centena = " quatrocentos"; break;
		case 5: this.centena = " quinhentos"; break;
		case 6: this.centena = " seissentos"; break;
		case 7: this.centena = " setecentos"; break;
		case 8: this.centena = " oitocentos"; break;
		case 9: this.centena = " novecentos"; break;
	}
}

public void recuperaString(int a){
		if(a ==0){
			JOptionPane.showMessageDialog(null, "Zero.");
		}
		else if(a < 10){
			escreveUnidade(a);
			JOptionPane.showMessageDialog(null, "Número = " + unidade);
		}
		else if (a < 100){
			int u = a % 10;
			int d = a / 10;
			escreveDezena(d);
			escreveUnidade(u);
			String num = this.dezena + this.unidade;
			JOptionPane.showMessageDialog(null, "Número = " + num);			
		}
		else if(a < 1000){
			int u = a % 10;
			int d = (a / 10) % 10;
			int c = (a / 10) / 10;
			escreveCentena(c);
			escreveDezena(d);
			escreveUnidade(u);
			String num = this.centena + "e" + this.dezena + "e" + this.unidade;
			JOptionPane.showMessageDialog(null, "Número = " + num);
		}
		else if(a == 1000){
			JOptionPane.showMessageDialog(null, "Mil.");
		}
	
	
}

public static void main(String args[]){
	Exercicio6 ex = new Exercicio6();
	ex.recuperaString(Integer.parseInt(JOptionPane.showInputDialog("Digite um valor entre 0 e 1000.")));
}

}[/code]

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…

Corrigi algusn erros:

[code]import javax.swing.JOptionPane;

public class Exercicio6 {
private String unidade, dezena, centena, numeroChato;

public void escreveUnidade(int unidade){
	switch (unidade){
		case 0: this.unidade = " "; break;
		case 1: this.unidade = " um"; break;
		case 2: this.unidade = " dois"; break;
		case 3: this.unidade = " três"; break;
		case 4: this.unidade = " quatro"; break;
		case 5: this.unidade = " cinco"; break;
		case 6: this.unidade = " seis"; break;
		case 7: this.unidade = " sete"; break;
		case 8: this.unidade = " oito"; break;
		case 9: this.unidade = " nove"; break;
		
	}
}

public void escreveNumeroChato(int numeroChato){
	switch(numeroChato){
		case 1: this.numeroChato = " onze"; break;
		case 2: this.numeroChato = " doze"; break;
		case 3: this.numeroChato = " treze"; break;
		case 4: this.numeroChato = " quatorze"; break;
		case 5: this.numeroChato = " quinze"; break;
		case 6: this.numeroChato = " dezesseis"; break;
		case 7: this.numeroChato = " dezesete"; break;
		case 8: this.numeroChato = " dezoito"; break;
		case 9: this.numeroChato = " dezenove"; break;			
	}
}

public void escreveDezena(int dezena){
	switch (dezena){
		case 1: this.dezena = " dez"; break;
		case 2: this.dezena = " vinte"; break;
		case 3: this.dezena = " trinta"; break;
		case 4: this.dezena = " quarenta"; break;
		case 5: this.dezena = " cinquenta"; break;
		case 6: this.dezena = " sessenta"; break;
		case 7: this.dezena = " setenta"; break;
		case 8: this.dezena = " oitenta"; break;
		case 9: this.dezena = " noventa"; break;
	}
}

public void escreveCentena(int centena){
	switch(centena){
		case 1: this.centena = " cento"; break;
		case 2: this.centena = " duzentos"; break;
		case 3: this.centena = " trezentos"; break;
		case 4: this.centena = " quatrocentos"; break;
		case 5: this.centena = " quinhentos"; break;
		case 6: this.centena = " seissentos"; break;
		case 7: this.centena = " setecentos"; break;
		case 8: this.centena = " oitocentos"; break;
		case 9: this.centena = " novecentos"; break;
	}
}

public void recuperaString(int a){
		if(a == 0){
			JOptionPane.showMessageDialog(null, "Zero.");
		}
		else if(a < 10){
			escreveUnidade(a);
			JOptionPane.showMessageDialog(null, "Número = " + unidade);
		}
		else if(a < 20){
			int num = a % 10;
			escreveNumeroChato(num);
			JOptionPane.showMessageDialog(null, "Número = " + numeroChato);
		}
		else if (a < 100){
			int u = a % 10; //96 % 10 = 6
			int d = a / 10; //96 / 10 = 9
			String num;
			if (d == 1){
				escreveNumeroChato(u);
				num = this.numeroChato;
			}
			else{
				escreveDezena(d);
				escreveUnidade(u);
				num = this.dezena + this.unidade;
			}
			
			JOptionPane.showMessageDialog(null, "Número = " + num);			
		}
		else if(a < 1000){
			int u = a % 10;
			int d = (a / 10) % 10;
			int c = (a / 10) / 10;
			String num;
			if (d == 1){
				escreveCentena(c);
				escreveNumeroChato(u);
				num = this.centena + " e" + this.numeroChato;
			}
			else if (d==0){
				escreveCentena(c);
				num = this.centena;
			}
			else{
				escreveCentena(c);
				escreveDezena(d);
				escreveUnidade(u);
				num = this.centena + " e" + this.dezena + this.unidade;
			}
			
			JOptionPane.showMessageDialog(null, "Número = " + num);
		}
		else if(a == 1000){
			JOptionPane.showMessageDialog(null, "Mil.");
		}
	
	
}

public static void main(String args[]){
	Exercicio6 ex = new Exercicio6();
	ex.recuperaString(Integer.parseInt(JOptionPane.showInputDialog("Digite um valor entre 0 e 1000.")));
}

}[/code]

Muito boa essa solução, entendi tudinho… foi a melhor solução que achei até agora !!!

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.

Com a utilização de ArrayList mais ainda…

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 :smiley: :D.

Vlww galera pelas repsostas.

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 !!!

Se você está programando a matriz, dependendo o nº de lados, você pode usar HashMap no lugar da matriz, aí procura direto pela key.