raqh 0 Denunciar post Postado Maio 10, 2009 Olá a todos, Estou a tentar fazer um programa que faça o cálculo de uma expressão na notação posfix. mas estou com um problema. Tenho um erro quando executo que não estou a conseguir corrigir. Quando na excução ponho 5 9 8 + 4 6 * * 7 + *, ele retorna uma excepção: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1 at PilhaArray.pop(PilhaArray.java:31) at Postfix.CalculPostFix(Postfix.java:29) at Postfix.main(Postfix.java:38) Alguem me pode ajudar? Aqui vai o meu código (que faz 3 ficheiros .java). Obrigado. //INTERFACE STACK public interface Stack { public void push(int i); public int pop(); public boolean isEmpty(); } //CLASSE PILHAARRAY public class PilhaArray implements Stack { private int[] stack; private int n; public PilhaArray() { stack = new int[1000000]; n=-1; } public boolean isEmpty() { return n == -1; } public void push(int item) { if (n < stack.length) { stack[++n] = item; } } public int pop() { int item = stack[n--]; return item; } } //CLASSE POSTFIX import java.io.*; public class Postfix { public static void CalculPostFix(String s2) { PilhaArray s = new PilhaArray (); for (int i = 0; i < s2.length(); i += 2) { if (s2.charAt(i) == '+') s.push(s.pop() + s.pop()); else if (s2.charAt(i) == '*') s.push(s.pop() * s.pop()); else { int num = 0; do { num = num*10 + s2.charAt(i)-'0'; // Constrói número ++i; } while (s2.charAt(i) != ' '); --i; s.push(num); } } System.out.println(s.pop()); } public static void main(String[] args) throws IOException { BufferedReader stdr = new BufferedReader(new InputStreamReader(System.in)); String line = stdr.readLine(); CalculPostFix(line); } } Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Maio 10, 2009 Aqui funcionou seu código. Não consegui simular seu resultado. O erro acontece no método pop da classe PilhaArray verifique a linha 29 no método CalculPostFix. Creio que seja essa: //System.out.println(s.pop()); Nessa análise o último pop tenta acessar o index -1 do array e por isso gera a exceção. Faça isso em seus métodos pop e push. public void push(int item) { if (n < stack.length) { stack[++n] = item; System.out.println("Empilhado: " + item + " no index: " + n); } } public int pop(){ System.out.println("Desempilhado: " + stack[n] + " no index: " + n); int item = stack[n--]; return item; } Com o resultado desse código podemos achar o problema. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites