Numeros Romanos! parte II.[RESOLVIDO]

3 respostas
A

Olá pessoal , eu sei que eu já criei um tópico relacionado a isso, mas me surgiu um outro problema.
Eu consegui fazer com que os números fossem convertidos para romanos, até aí tudo bem.

package Romano;

import java.util.Scanner;


public class Romano {
    public static String[] centena(int c){
        String []cent = new String[9];
   
        cent[0]="C";
        cent[1]="CC";
        cent[2]="CCC";
        cent[3]="CD";
        cent[4]="D";
        cent[5]="DC";
        cent[6]="DCC";
        cent[7]="DCCC";
        cent[8]="CM";
        
        switch(c){
            case 100:
                System.out.println(cent[0]);
                break;
            case 200:
                System.out.println(cent[1]);
                break;
            case 300:
                System.out.println(cent[2]);
                break;
            case 400:
                System.out.println(cent[3]);
                break;
            case 500:
                System.out.println(cent[4]);
                break;
            case 600:
                System.out.println(cent[5]);
                break;
            case 700:
                System.out.println(cent[6]);
                break;
            case 800:
                System.out.println(cent[7]);
                break;
            case 900:
                System.out.println(cent[8]);
                break;
        }
        return cent;
    }
    public static String[] dezena(int b){
      String[] dez = new String[9];
        
        dez[0]="X";
        dez[1]="XX";
        dez[2]="XXX";
        dez[3]="LX";
        dez[4]="L";
        dez[5]="LX";
        dez[6]="LXX";
        dez[7]="LXXX";
        dez[8]="LC";
        
        switch(b){
            case 10:
                System.out.println(dez[0]);
                break;
            case 20:
                System.out.println(dez[1]);
                break;
            case 30:
                System.out.println(dez[2]);
                break;
            case 40:
                System.out.println(dez[3]);
                break;
            case 50:
                System.out.println(dez[4]);
                break;
            case 60:
                System.out.println(dez[5]);
                break;
            case 70:
                System.out.println(dez[6]);
                break;
            case 80:
                System.out.println(dez[7]);
                break;
            case 90:
                System.out.println(dez[8]);
                break;
        }
        return dez;
    }

    public static String[] unidade(int a){
        String [] uni = new String[9];
        
        uni[0]="I";
        uni[1]="II";
        uni[2]="III";
        uni[3]="IV";
        uni[4]="V";
        uni[5]="VI";
        uni[6]="VII";
        uni[7]="VIII";
        uni[8]="IX";
        switch(a){
            case 1:
                System.out.println(uni[0]);
                break;
            case 2:
                System.out.println(uni[1]);
                break;
            case 3:
                System.out.println(uni[2]);
                break;
            case 4:
                System.out.println(uni[3]);
                break;
            case 5:
                System.out.println(uni[4]);
                break;
            case 6:
                System.out.println(uni[5]);
                break;
            case 7:
                System.out.println(uni[6]);
                break;
            case 8:
                System.out.println(uni[7]);
                break;
            case 9:
                System.out.println(uni[8]);
                break;
                       	
        }
        return uni;
        
    }
    public static void main(String[] args) {
        Scanner teclado = new Scanner(System.in);
        int numero,cont = 0,digito, aux,aux2;
        System.out.println("Digite um número: ");
        numero = teclado.nextInt();
        digito = numero;
        aux =numero;
        aux2 = numero;
        while(digito > 0){
        	digito /= 10;
        	cont++;
         }
         switch(cont){
         case 1:
        	 System.out.println(unidade(numero));
        	 break;
         case 2:
        	 aux %= 10;
        	 numero -= aux;
        	 System.out.println(dezena(numero));
        	 //System.out.print("\t");
        	 System.out.println(unidade(aux));
        	 break;
         case 3: 
        	 aux %= 10;
        	 numero -= aux;
        	 numero %= 100;
        	 aux2 -= (numero + aux);
        	 System.out.println(centena(aux2));
        	 System.out.println(dezena(numero));
        	 System.out.println(unidade(aux));
         }
        }
	  
        
    }

Mas quando eu rodo o programa aparece isso :

Digite um número: 
463
CD
[Ljava.lang.String;@11a64ed
LX
[Ljava.lang.String;@1d80e6d
III
[Ljava.lang.String;@19b5393
Digite um número: 
84
LXXX
[Ljava.lang.String;@11a64ed
IV
[Ljava.lang.String;@1d80e6d

Não sei porque essas mensagens estão aparecendo, por favor me deem alguma sugestão!! Obrigado!!

3 Respostas

ViniGodoy

Estão aparecendo porque você está imprimindo o array de strings que tem no retorno dos métodos. O correto seria só retornar a String certa (ao invés de dar println dentro do método) e imprimi-las.

Mude seu código:
package Romano;

import java.util.Scanner;

public class Romano {
    public static String centena(int c){
        String []cent = {
            "C", "CC", "CCC", 
            "CD", "D", "DC",  
            "DCC", "DCCC", "CM"
        };
        
        int ind = (c - 100) / 100;
        System.out.println(cent[ind]);
    }

    public static String dezena(int b){
        String[] dez = {
            "X", "XX", "XXX", 
            "LX", "L", "LX", 
            "LXX", "LXXX", "LC"
        };
        int ind = (b - 10) / 10;
        return dez[ind];
    }

    public static String unidade(int a){
        String [] uni = {
            "I", "II", "III", 
            "IV", "V", "VI", 
            "VII", "VIII", "IX"
        }
        return uni[a-1];
    }

    public static void main(String[] args) {
        Scanner teclado = new Scanner(System.in);
        int numero,cont = 0,digito, aux,aux2;
        System.out.println("Digite um número: ");
        numero = teclado.nextInt();
        digito = numero;
        aux =numero;
        aux2 = numero;
        while(digito > 0){
            digito /= 10;
            cont++;
        }
        switch(cont){
            case 1:
                System.out.println(unidade(numero));
                break;
            case 2:
                aux %= 10;
                numero -= aux;
                System.out.println(dezena(numero));
                System.out.println(unidade(aux));
                break;
            case 3: 
                aux %= 10;
                numero -= aux;
                numero %= 100;
                aux2 -= (numero + aux);
                System.out.println(centena(aux2));
                System.out.println(dezena(numero));
                System.out.println(unidade(aux));
        }
    }
}
A

Ah ta , então eu deixo pra imprimir só no main. Mas isso é genérico ou só nesse caso mesmo??

Ps : Valeu pela ajuda!!! :slight_smile: :slight_smile:

ViniGodoy

O ideal é separar as coisas. Um calcula, outro imprime.
Aquelas linhas estranhas eram só o fato de você estar retornando e imprimindo os arrays.

Criado 23 de março de 2013
Ultima resposta 24 de mar. de 2013
Respostas 3
Participantes 2