Ir para o conteúdo

Publicidade

 Estatísticas do Fórum

  • 0 Usuários ativos

    0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

Cursos Online iMasters
Foto:

java.lang.ArrayIndexOutOfBoundsException: -1

  • Por favor, faça o login para responder
1 resposta neste tópico

#1 raqh

raqh
  • Membros
  • 1 posts

Postado 10 maio 2009 - 10:41

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.ArrayIndexOutOfBound---ception: -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

#2 Kandrade

Kandrade
  • Membros
  • 2.680 posts

Postado 10 maio 2009 - 17:17

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.

:thumbsup:
  • 0




Publicidade

/ins>