Foro de elhacker.net

Programación => Java => Mensaje iniciado por: __Horus__ en 14 Marzo 2008, 05:43 am



Título: duda en codigo con array
Publicado por: __Horus__ en 14 Marzo 2008, 05:43 am
Hola!

Nos pidieron en la escuela un programa que pasa un numero que uno le ingrese por el teclado al programa y lo pase a numero romano  menor que 3999 pero con arreglos y con to.charArray y partir de ellos para pasarlos de unidades, decenas, centenas y milesimas dependiendo su pocision el codigo en si lo tengo compilado en eclipse y no me marca errores pero al ejecutarlo me muestra la exception

345<---- este le ingrese
java.lang.ArrayIndexOutOfBoundsException: 3
   at Romano.main(Romano.java:198)
Exception in thread "main"

Segun se  la exception ArrayIndexOutOfBoundsException  aparece cuando los subindices del arreglo estan fuera de los limites establecidos por la matriz pero segun yo lo ando pasando el String a mi arreglo romano de char y partiendolo en pocision a int sin embargo me genera esa exception

Espero me puedan ayudar :D

Aqui esta el codigo:
Esta algo larguito

import java.io.DataInputStream;
import java.io.IOException;


public class Romano {

   
   public static void main(String[] args) {
      // TODO Auto-generated method stub
      String romanos=leeDato();
      char[] romano=romanos.toCharArray();
      
      if(romano.length==4){
         int r=romano[0];
         
         switch(r){
         case 1:
         System.out.print("M");
         
         break;
         case 2:
         System.out.print("MM");
         
         break;
         case 3:
         System.out.print("MMM");
         
         break;
         }
         int e=romano[1];
         
         switch(e){
         case 1:
            System.out.print("C");
            break;
            case 2:
            System.out.print("CC");
            break;
            case 3:
            System.out.print("CCC");
            break;
            case 4:
            System.out.print("CD");
            break;
            case 5:
            System.out.print("D");
            break;
            case 6:
            System.out.print("DC");
            break;
            case 7:
            System.out.print("DCC" );
            break;
            case 8:
            System.out.print("DCCC");
            break;
            case 9:
            System.out.print("DM");
            break;
            }
         
         int w=romano[2];
         
         
         switch(w){
         case 1:
         System.out.print("X");
         break;
         case 2:
         System.out.print("XX");
         break;
         case 3:
         System.out.print("XXX");
         break;
         case 4:
         System.out.print("XL");
         break;
         case 5:
         System.out.print("L");
         break;
         case 6:
         System.out.print("LX");
         break;
         case 7:
         System.out.print("LXX" );
         break;
         case 8:
         System.out.print("LXXX");
         break;
         case 9:
         System.out.print("XC");
         break;
         }
         int q=romano[3];
      
         
         
         switch(q){
         case 1:
         System.out.print("I");
         break;
         case 2:
         System.out.print("II");
         break;
         case 3:
         System.out.print("III");
         break;
         case 4:
         System.out.print("IV");
         break;
         case 5:
         System.out.print("V");
         break;
         case 6:
         System.out.print("VI");
         break;
         case 7:
         System.out.print("VII" );
         break;
         case 8:
         System.out.print("VIII");
         break;
         case 9:
         System.out.print("IX");
         break;
         }
         }
      
      
if(romano.length==3){
   
   int e=romano[1];
   
   switch(e){
   case 1:
      System.out.print("C");
      break;
      case 2:
      System.out.print("CC");
      break;
      case 3:
      System.out.print("CCC");
      break;
      case 4:
      System.out.print("CD");
      break;
      case 5:
      System.out.print("D");
      break;
      case 6:
      System.out.print("DC");
      break;
      case 7:
      System.out.print("DCC" );
      break;
      case 8:
      System.out.print("DCCC");
      break;
      case 9:
      System.out.print("DM");
      break;
      }
   
   int w=romano[2];

   
   switch(w){
   case 1:
   System.out.print("X");
   break;
   case 2:
   System.out.print("XX");
   break;
   case 3:
   System.out.print("XXX");
   break;
   case 4:
   System.out.print("XL");
   break;
   case 5:
   System.out.print("L");
   break;
   case 6:
   System.out.print("LX");
   break;
   case 7:
   System.out.print("LXX" );
   break;
   case 8:
   System.out.print("LXXX");
   break;
   case 9:
   System.out.print("XC");
   break;
   }
   int q=romano[3];

   
   
   switch(q){
   case 1:
   System.out.print("I");
   break;
   case 2:
   System.out.print("II");
   break;
   case 3:
   System.out.print("III");
   break;
   case 4:
   System.out.print("IV");
   break;
   case 5:
   System.out.print("V");
   break;
   case 6:
   System.out.print("VI");
   break;
   case 7:
   System.out.print("VII" );
   break;
   case 8:
   System.out.print("VIII");
   break;
   case 9:
   System.out.print("IX");
   break;
   }
      }
if(romano.length==2){
   int w=romano[2];
   
   
   switch(w){
   case 1:
   System.out.print("X");
   break;
   case 2:
   System.out.print("XX");
   break;
   case 3:
   System.out.print("XXX");
   break;
   case 4:
   System.out.print("XL");
   break;
   case 5:
   System.out.print("L");
   break;
   case 6:
   System.out.print("LX");
   break;
   case 7:
   System.out.print("LXX" );
   break;
   case 8:
   System.out.print("LXXX");
   break;
   case 9:
   System.out.print("XC");
   break;
   }
   int q=romano[3];
      
   switch(q){
   case 1:
   System.out.print("I");
   break;
   case 2:
   System.out.print("II");
   break;
   case 3:
   System.out.print("III");
   break;
   case 4:
   System.out.print("IV");
   break;
   case 5:
   System.out.print("V");
   break;
   case 6:
   System.out.print("VI");
   break;
   case 7:
   System.out.print("VII" );
   break;
   case 8:
   System.out.print("VIII");
   break;
   case 9:
   System.out.print("IX");
   break;
   }
   
}
if(romano.length==1){
   int q=romano[3];
   
   switch(q){
   case 1:
   System.out.print("I");
   break;
   case 2:
   System.out.print("II");
   break;
   case 3:
   System.out.print("III");
   break;
   case 4:
   System.out.print("IV");
   break;
   case 5:
   System.out.print("V");
   break;
   case 6:
   System.out.print("VI");
   break;
   case 7:
   System.out.print("VII" );
   break;
   case 8:
   System.out.print("VIII");
   break;
   case 9:
   System.out.print("IX");
   break;
   }
   
}
      
      
   }
   public static String leeDato() {
      String dato = "";
      try {
         DataInputStream intro = new DataInputStream(System.in);
         dato = intro.readLine();
      } catch (IOException e) {
         System.out.println("leeDato-- Error de Entrada/Salida : " + e);
      }
      return dato;
   }
}





Título: Re: duda en codigo con array
Publicado por: egyware en 14 Marzo 2008, 15:19 pm
Primero creo que deberias colocarlo en las etiquetas code para que se entienda
y donde compruebas que el numero ingresado es de largo 3 empiezar a obtener desde el 1 cosa no error fatal pero si logico
acuerdate que en una lista los indices empiezan desde el cero
asi
0
1
2
y esto tiene largo 3 solo cuenta cuantos numero hay no mas
Eso suerte xauu
Creo que puedes usar algun bucle tienes mucho codigo repetidas que podiran reservirte

PS:
Ademas donde compruebas que es de largo 2 y 1 tambien te equivocas al asignar tus numeros
pones
int e=romano[1];
en ves de
int e=romano[0];


Título: Re: duda en codigo con array
Publicado por: Casidiablo en 14 Marzo 2008, 15:30 pm
Es que primero dices:

if(romano.length==3)

Y luego:

int e=romano[1];
//no se que
int e=romano[2];
//no se que
int e=romano[3];
//no se que

Pero debería ser

int e=romano[0];
//no se que
int e=romano[1];
//no se que
int e=romano[2];
//no se que


Un saludo!

Citar
Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.


Título: Re: duda en codigo con array
Publicado por: __Horus__ en 16 Marzo 2008, 04:06 am
ok gracias tienen razon deberia empezar desde subindice cero no desde el 1 enseguida lo corrijo  :D