[RESOLVIDO]Função digit e otimização de função

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.

1 curtida

O teu return pode ser simplesmente assim:

return numeros[num-48];

Ou voce pode utilizar um MAP

Poxa, não tinha nem ideia de que a resolução do problema que eu tinha encontrado seria tão simples, nem imaginei que um char retornaria um inteiro, seu código ascii, sem precisar de uma outra função, muito obrigado pmlm.cleciusjm obrigado pela sugestão mas, acho que seria mais complexo, mas obrigado de qualquer forma.

Oi,

De qualquer forma, a sua solução na “unha” foi um tanto quanto interessante. Parabéns!

Edite seu primeiro post e coloque a tag [RESOLVIDO].

Tchauzin!

Obrigado :slight_smile: