Underc0de

Foros Generales => Dudas y pedidos generales => Mensaje iniciado por: DoSser en Noviembre 02, 2016, 09:20:43 PM

Título: [SOLUCIONADO] Recorrer arreglo en java de fin a inicio
Publicado por: DoSser en Noviembre 02, 2016, 09:20:43 PM
Hola :)  estoy trabajando en un programita que convierta expresiones infijas en prefijas,  teniendo en cuenta que para tal conversión se necesita leer la expresión de derecha a izquierda e ir acomodando operadores con operandos de esa manera, y después se vuelve a leer  la expresión  resultante de derecha a izquierda para obtener la expresión final. bueno pues resulta que se me ocurrió hacerlo de esta manera:
Código (java) [Seleccionar]

  /*voa tratar de leer de derecha a izquierda a infija para leerla normal
        a la hora de convertir vale?*/
        //guarda en array el valor de infija
        char[] a = infija.toCharArray();
        // respalda infija
       String respaldo = "";
        for(int x = infija.length(); x > 0; x--)
        {
            respaldo = respaldo + a[x];
        }
        /*infija ahora toma el valor de respaldo,
        lo que indica que ya esta acomodada leida de derecha a izq*/
         infija  = respaldo;

Se supone que con el ciclo for pretendo empezar a leer la expresión desde el ultimo carácter en el arreglo hasta su posición 0 e irla almacenando en el String respaldo y luego que infija sea igual a respaldo para después leerla como si fuera una conversión de infijo a postfijo, y  después de esto volvería a hacer un ciclo for repitiendo el el mismo procedimiento del primer ciclo para obtener mi expresión 
final pero después de que me pide la expresión, el programa truena y  me muestra un error:
Código (java) [Seleccionar]

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at convertidordefunciones.Prefija.convertir(Prefija.java:31)
at convertidordefunciones.Prefija.evaluar(Prefija.java:15)
at convertidordefunciones.ConvertidorDeFunciones.main(ConvertidorDeFunciones.java:23)
Java Result: 1

este error solo aparece cuando en el ciclo for a x le doy el valor de la longitud infija y trato de decrementarlo..
¿Podría alguien explicarme por que no me funciona?
o si alguna alma bondadosa tiene la amabilidad de explicarme como lo podría hacer.. ya se que hay muchos tutoriales en youtube pero  mi intención es aprender como hacerlo.. estoy seguro de que si veo el tutorial en youtube terminare copiando el código XD
Título: Re:Recorrer arreglo en java de fin a inicio
Publicado por: rollth en Noviembre 02, 2016, 09:47:49 PM
El error que te da es porque estás intentando entrar a una posición de un array que no existe.

Prueba a en lugar de hacer "infija.length()" hacer "infija.length", sin parentesis.

.length se usa para un array (no es un metodo)
.length() se usa para un String
.size se usa para un ArrayList

Espero que te sirva :D
Título: Re:Recorrer arreglo en java de fin a inicio
Publicado por: seth en Noviembre 03, 2016, 07:28:52 PM
Los indices de los arreglos empiezan con 0, si queres acceder al ultimo elemento es el largo -1
Título: Re:Recorrer arreglo en java de fin a inicio
Publicado por: DoSser en Noviembre 03, 2016, 09:01:55 PM
Muy bien!!  lo que menciona rollth no lo sabia,  muchas gracias! y tambien a seth que lo que menciona hizo que me  funcionara el programa. Saludos :)