Publicidade

raqh

java.lang.ArrayIndexOutOfBoundsException: -1

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);
	 }
}
0

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

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!


Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.


Entrar Agora

  • Próximos Eventos