Escrever por extenso um nº int digitado

Bom dia, queria um auxílio pra finalizar este problema:

(Construa a classe Dinheiro. Esta classe tem um único atributo que é um valor inteiro em R$. Faça os métodos básicos: construtor, get, set e toString, sabendo que o valor deve pertencer ao intervalo [1;999]. Em caso de valor incorreto, o valor padrão do atributo é 1. Implemente usando o switch, um método que devolve uma String com o valor escrito por extenso. Não faça um case para cada valor possível, trate centena, dezena e unidade.)

Bem, eu fiz 3 métodos(p/ converter a dezena, a centena e a unidade), o problema é para imprimir, por exemplo se o nº for 19, tem que imprimir apenas a dezena e imprimi dezenove e nove, pois para imprimir eu concateno centena, dezena e unidade.

Segue o código:

public class Converte {
    private int valor;
    
    public Converte(int valor) {
        setValor(valor);
    }
    
    public int getValor() {
        return valor;
    }
    
    public void setValor(int valor) {
        if (valor > 0 && valor < 1000) 
            this.valor = valor;
        else this.valor = 1;
    }
    
    public String converteCentena() {
        int c = valor/100;
        String centena = "";
        
        switch(c) {
            case 1: if (valor == 100)
                              centena = "Cem";
                          else centena = "cento e";
                            break;
            case 2: centena = "duzentos";
                            break;
            case 3: centena = "trezentos";                
                            break;
            case 4: centena = "quatrocentos";                
                            break;                            
            case 5: centena = "quinhentos";                
                            break;
            case 6: centena = "seiscentos";                
                            break;                            
            case 7: centena = "setecentos";                
                            break;                 
            case 8: centena = "oitocentos";                
                            break;     
            case 9: centena = "novecentos";                
        } return centena;
    }
    
    public String converteDezena() {
        int d = valor%100/10;
        int u = valor%100%10;
        String dezena = "";
        
        switch(d) {
            case 1: switch(u) {
                case 0: dezena = "e dez";
                    break;
                case 1: dezena = "e onze";
                    break;
                case 2: dezena = "e doze";
                    break;
                case 3: dezena = "e treze";
                    break;                    
                case 4: dezena = "e quatorze";
                    break;                    
                case 5: dezena = "e quinze";
                    break;
                case 6: dezena = "e dezesseis";
                    break;                    
                case 7: dezena = "e dezessete";
                    break;                    
                case 8: dezena = "e dezoito";
                    break;                    
                case 9: dezena = "e dezenove";
                    break;                    
        } break;
            case 2: dezena = "vinte";
                break;
            case 3: dezena = "trinta";
                break;
            case 4: dezena = "quarenta";
                break;
            case 5: dezena = "cinquenta";
                break;
            case 6: dezena = "sessenta";
                break;
            case 7: dezena = "setenta";
                break;
            case 8: dezena = "oitenta";
                break;
            case 9: dezena = "noventa";
        } return dezena;
    }

    
    public String converteUnidade() {
        int u; 
        String unidade = "";
        
        u = valor%100%10;
    
        if (valor < 10) {
            switch(u){
                case 1: unidade = "um";
                    break;
                case 2: unidade = "dois";
                    break;
                case 3: unidade = "tres";
                    break;
                case 4: unidade = "quatro";
                    break;
                case 5: unidade = "cinco";
                    break;
                case 6: unidade = "seis";
                    break;
                case 7: unidade = "sete";
                    break;
                case 8: unidade = "oito";
                    break;
                case 9: unidade = "nove";
                    break;
            } 
        }
        else {
            switch(u){
                case 1: unidade = "e um";
                    break;
                case 2: unidade = "e dois";
                    break;
                case 3: unidade = "e tres";
                    break;
                case 4: unidade = "e quatro";
                    break;
                case 5: unidade = "e cinco";
                    break;
                case 6: unidade = "e seis";
                    break;
                case 7: unidade = "e sete";
                    break;
                case 8: unidade = "e oito";
                    break;
                case 9: unidade = "e nove";
            }
        } return unidade;
  }    
}

*** Tameio grande, e ainda com alguns erros na impressão do “e” também…asvezes n sai o “e” e as vezes sai a mais…

Aqui o código onde mando imprimir(minha classe App):

public class App {

    public void executa() {
            
    Console cons = new Console();
    
    cons.print("Digite um valor entre 1 e 999: ");
    int n = cons.readInt();
    
    Converte d = new Converte(n);
    
    cons.print("O valor digitado foi: [R$ "+d.getValor()+",00]"+" --> "+d.converteCentena()+" "+d.converteDezena()+" "+d.converteUnidade()".");
    }
    
    public static void main(String args[]) {
        App ap1 = new App();
        
        ap1.executa();
    }
}

Grato,
Jeferson Neves

Ta funcionando pra alguns números, mas em alguns casos (como o dezenove) imprime e dezenove e nove…

Também queria saber como controlar para pôr o “e” e qdo não precisa, por exemplo: 129 centro e vinte “e” nove. Se por o “e” final do vinte (centena = “vinte e”), funciona pra 12[1-9], mas para 120 vai imprimir “cento e vinte e”.

Alguem poderia me auxiliar com estes “e’s”

Grato,
Jeferson Neves

você já tentou fazer um tipo de substring para pegar a posição dos números ai você converte para string e imprimi?

entende o que eu quero dizer

[quote=AlissonGuj]você já tentou fazer um tipo de substring para pegar a posição dos números ai você converte para string e imprimi?

entende o que eu quero dizer[/quote]

Na verdade não entendi o que quiseste dizer, ainda estou aprendendo Java, faz pouco tempo que comecei a cadeira…

Se puder me explicar melhor te agradeço.

Grato,
Jeferson Neves