Boa noite, então gente, eu estou tentando resolver um problema aqui, na verdade eu até resolvi mas, queria uma forma mais elegante de resolver… o problema é oseguinte: Escreva um programa que dado um valor numérico entrado pelo usuário imprima cada um dos seus dígitos por extenso.
Exemplo:
Entre o número: 4571
Resultado: quatro cinco sete um
eu resolvi dessa forma:
import java.util.Scanner;
public class Exerc2 {
public static void main(String[] args) {
String números;
Scanner input = new Scanner(System.in);
System.out.print("Digite um numero inteiro: ");
números = input.nextLine();
for(int i = 0; i < números.length(); i++)
System.out.printf("%s ",converteNumEscrito(números.charAt(i)));
System.out.println();
}
public static String converteNumEscrito(char num){
String [] numeros = {"zero","um","dois","três","quatro","cinco","seis","sete","oito","nove"};
int index = 0;
switch(num)
{
case '0': index = 0;
break;
case '1': index = 1;
break;
case '2': index = 2;
break;
case '3': index = 3;
break;
case '4': index = 4;
break;
case '5': index = 5;
break;
case '6': index = 6;
break;
case '7': index = 7;
break;
case '8': index = 8;
break;
case '9': index = 9;
}
return numeros[index];
//return numeros[Character.digit(num-48, 10)];
}
}
O que eu tentei fazer com o último return que está comentado foi pegar uma função que me retornasse o código ascii do caracter num, subtrai 48 porque o código ascii do 0 é 48 e como o código ascii dos números de 0 a 9 é consecutivo acho que isso me retornaria o índice exato. Pelo que eu lí e entendi na documentação o digit me retornaria o código ascii do caracter enviado na base em que o int depois da vígula indica. Pelo que parece eu viajei nisso, no entendimento do que a função digit faz pq uma exceção de index fora do limite foi lançada. Alguém saberia me dizer se tem alguma função pra fazer o que eu queria ou se a digit faz isso mesmo e eu estou usando de forma errada? Por isso acabei usando o switch mesmo que é meio que apelar além de deixar o código dessa função muito maior, porque na verdade essa função teria só 2 linhas se a digit funcionasse como eu esperava. Além disso como o foco não é validações e coisas do tipo nem me preocupei com exceções e tudo mais, é isso.