Foros del Web » Programación para mayores de 30 ;) » Java »

Problema con Arrays

Estas en el tema de Problema con Arrays en el foro de Java en Foros del Web. Buenas! Estoy haciendo una práctica para la carrera, la cual necesita uso de arrays. He estado trabajando con ellos perfectamente hasta hoy que me han ...
  #1 (permalink)  
Antiguo 05/01/2012, 13:58
Avatar de joanfont  
Fecha de Ingreso: marzo-2008
Ubicación: 127.0.0.1
Mensajes: 66
Antigüedad: 16 años, 1 mes
Puntos: 0
Problema con Arrays

Buenas!

Estoy haciendo una práctica para la carrera, la cual necesita uso de arrays. He estado trabajando con ellos perfectamente hasta hoy que me han empezado a hacer el 'tonto':

Este fragmento de código:

Código Java:
Ver original
  1. public static void main(String[] args) throws IOException {
  2.         Traductor traductor = new Traductor();
  3.         String ruta = "texto.txt";
  4.         String retorno = "";
  5.         BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
  6.         System.out.print("Desea especificar un archivo a traducir, de lo contrario se cojerá '"+ruta+"' (s/n) ? ");
  7.         String opcion = in.readLine();
  8.         if(opcion.equals("s") || opcion.equals("S")){
  9.             System.out.print("Introduzca la ruta absoluta del archivo a traducir: ");
  10.             ruta = in.readLine();
  11.         }
  12.         char[] texto = traductor.traducir(ruta).toCharArray();
  13.         int i = 0;
  14.         String temporal;
  15.         while(i<texto.length){
  16.             temporal = "";
  17.             while(texto[i] != ' '){
  18.                 temporal+=texto[i];
  19.                 i++;
  20.             }
  21.             retorno+=traductor.traducir(temporal);
  22.             i++;
  23.         }
  24.         System.out.print(retorno);
  25.     }

Me salta estos errores en la consola de NetBeans

Código:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9
        at pseudotraductor.Main.main(Main.java:34)
Java Result: 1
La linia 34 equivale a:
Código Java:
Ver original
  1. while(texto[i] != ' '){

No tengo ni idea de lo que puede ser

... y los métodos lectura() y traducir ()

Código Java:
Ver original
  1. public String traducir(String palabra) throws IOException{
  2.         String retorno;
  3.         boolean fin = true;
  4.         FileReader fichero = new FileReader(diccionario);
  5.         BufferedReader buffer = new BufferedReader(fichero);
  6.         int i;
  7.         do{
  8.             i = buffer.read();
  9.             String texto="";
  10.             while (i!=-1 && i!=(int)' '){
  11.                 texto += (char)i;
  12.                 i=buffer.read();
  13.             }
  14.             if(!texto.equals(palabra)){
  15.                 do{
  16.                     i=buffer.read();
  17.                 }while(i!=(int)'\n'&&i!=-1);
  18.             }else{
  19.                 fin = false;
  20.             }
  21.         }while(fin && i!=-1);
  22.  
  23.         if (i==-1){
  24.             retorno = palabra;
  25.         }else{
  26.             buffer.read();// elimina els :
  27.             buffer.read();// elimina l'espai que hi ha abans de la traducció de cada paraula
  28.  
  29.             retorno="";
  30.             i=buffer.read();
  31.             while(i!=(int)'\n'&&i!=-1){
  32.                 retorno+=(char)i;
  33.                 i=buffer.read();
  34.             }
  35.             buffer.close();
  36.        }
  37.             traduccion = retorno;
  38.             return retorno;
  39.     }
  40.  
  41.     public String lectura(String archivo) throws IOException{
  42.         FileReader file = new FileReader(archivo);
  43.         BufferedReader buffer = new BufferedReader(file);
  44.         int i = buffer.read();
  45.         String retorno = "";
  46.         while(i!=-1){
  47.             retorno+=(char)i;
  48.             i = buffer.read();
  49.         }
  50.         return retorno;
  51.     }
__________________
http://www.joan-font.com

Programador PHP
  #2 (permalink)  
Antiguo 05/01/2012, 15:07
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Problema con Arrays

ArrayIndexOutOfBoundsException indica que estás intentando leer una posición del array mayor que las que existen.

Tu último caracter no es ' ', y tu algoritmo intenta acceder a la siguiente posición.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #3 (permalink)  
Antiguo 05/01/2012, 18:16
Avatar de CapacProg  
Fecha de Ingreso: marzo-2010
Ubicación: Lima - Perú
Mensajes: 324
Antigüedad: 14 años, 1 mes
Puntos: 71
Respuesta: Problema con Arrays

Cita:
Iniciado por Xerelo Ver Mensaje
ArrayIndexOutOfBoundsException indica que estás intentando leer una posición del array mayor que las que existen.

Tu último caracter no es ' ', y tu algoritmo intenta acceder a la siguiente posición.
Parece que traduces para un texto de más de una palabra y como se sabe de palabra en palabra hay un espacio en blanco; pero se supone que si tu texto es de una sola palabra fallaría ya que no hay espacios en blaco y cuando es la última palabra áun sigue prosiguiendo en busca de más palabras lo que da la excepción. Bueno eso es lo que puedo ver en tu implementación.
__________________
%
El mejor guerrero no es el que triunfa siempre sino el que vuelve sin miedo a la batalla.
%
  #4 (permalink)  
Antiguo 06/01/2012, 13:08
Avatar de joanfont  
Fecha de Ingreso: marzo-2008
Ubicación: 127.0.0.1
Mensajes: 66
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Problema con Arrays

El archivo que estoy leyendo para luego traducir contiene: "alumnos vitalidad" (sin las comillas).

Lo que entiendo para este bucle es que me leera hasta que haya un espacio ' ', y luego lo traducira, y aumentará la posicion del array, hasta que haya una letra, es decir, leerá hasta alumnos, saltara el espacio y volverá a leer.
__________________
http://www.joan-font.com

Programador PHP
  #5 (permalink)  
Antiguo 07/01/2012, 03:38
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Problema con Arrays

Tu algoritmo tiene un fallo.

Lees la primera palabra hasta que aparece el espacio, entonces haces la traducción de la palabra, pero luego continúas con la segunda palabra ¿dónde está el espacio que le dice que la palabra ha terminado? La última palabra nunca termina.

Cita:
while(i<texto.length && texto[i] != ' '){
temporal+=texto[i];
i++;
}
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.

Etiquetas: arrays, strings
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:13.