Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

raqh

java.lang.ArrayIndexOutOfBoundsException: -1

Recommended Posts

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.