ArrayIndexOutOfBoundsException - Não consigo arrumar

4 respostas
E

Bom galera, meu problema é o seguinte, eu estou estudando pilhas, listas e filas na facudade.
O professor pediu p/ agnt fazer uma classe de pilha com as operações básicas.
Eu fiz e talz. Porém na hora de rodar, o compilador me aponta um erro ArrayIndexOutOfBoundsException, em todas as minhas estruturas em que eu verifico os elementos do array.
O problema, é que, mesmo quando o index é 0, ele fala dá o ArrayIndexOutOfBoundsException.

Olha o codigo ai

public class Pilha {
	
	private int topo;
	private String[] tamanho=new String[50];
	private boolean vazio;
	
	
	public void PUSH(Pilha p, String x){//x é um elemento qualquer a ser inserido na pilha.
		if(p.ISEMPTY(p)==false){
			System.out.println("A pilha está cheia");
		}else{
		for(int i=0;i<=tamanho.length;i++){
			if(tamanho[i]==null){
				tamanho[i]=x;
				break;
				}	
			}
		}
	}

	
	public String TOP(Pilha p){
		String elemento="";
		for(int i=0;i<=tamanho.length;i++){
			if(tamanho[i]==null){
				elemento=tamanho[i-1];
				break;
				}
			break;
		}
		return elemento;
	}
	
	
	
	public String POP(Pilha p){
		String elemento = "";
		if(p.ISFULL(p)==true){
			tamanho[50]=null;
		}else if (p.ISEMPTY(p)==true) {
			System.out.println("A pilha está vazia");
		}
		for(int i=0;i<=tamanho.length;i++){
			if(tamanho[i]==null){
				tamanho[i-1]=null;
				break;
				}
			break;
		}
		return elemento;
	}

	
	
	
	public void INIT(Pilha p){
		this.topo = -1;	
		this.vazio=true;
	}
	
	
	public boolean ISEMPTY(Pilha p){
		for(int i=0;i<=tamanho.length;i++){
			if(tamanho[i]==null){
				vazio = true;
				}
			else{
				vazio = false;
				}
		}
		return vazio;
	}
	
	
	public boolean ISFULL(Pilha p){
		for(int i=0;i<=tamanho.length;i++){
			if(tamanho[i]==null){
				vazio = false;
				}
			else{
				vazio = true;
				}
		}
		return vazio;
	}
	
	
	
	
		
	

	
		
		
		
	
}

Um exemplo que eu tentei utilizar

public class Questao1 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Pilha p = new Pilha();
		
		p.INIT(p);
		p.PUSH(p, "5");
		p.TOP(p);

	}

}

o erro gerado foi:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 50 at Pilha.ISEMPTY(Pilha.java:65) at Pilha.PUSH(Pilha.java:10) at Questao1.main(Questao1.java:11)

Desde ja, agradeço a ajuda de todos.

4 Respostas

nel

Oi,

a exceção java.lang.ArrayIndexOutOfBoundsException ocorre quando se tenta acessar uma posição inexistente de um vetor.
Veja:

int[] vet = new int[] {1, 2, 3}; int valor = vet[3];

Vai gerar a exceção porque não existe a posição 3. O vetor possuir tamanho três mas ele inicia em 0, portanto:

vet[0] = 1; vet[1] = 2; vet[2] = 3;

Essa são as posições e seus respectivos valores.
Seu erro provavelmente está associado ao fato de no seu laço de repetição estar fazendo isso:

for(int i=0;i<=tamanho.length;i++)

Sendo <= tu vai acessar a posição exata do lenght. O lenght do vetor que demonstrei acima é 3 mas não existe a posição três, perfeito ?
Portanto, ou retire o ‘=’ e deixe apenas ‘<’ ou trate isso dentro do laço.

Abraços.

F

Olá eliezerbs9!

Você está fazendo a varredura em seus loops for de maneira incorreta. As posições existentes num array é sempre array.length-1. Então você não pode colocar o código dessa maneira:

for(int i=0;i<=tamanho.length;i++)
...

Isso irá gerar uma exception do tipo ArrayIndexOutOfBoundsException, ou seja, você está tentando acessar uma posição do array fora do range existente.
O correto é:

for(int i = 0; i < meuArray.length; i++)
...

Abraços!

E

Opa, é verdade. Agora sumiu o erro do array.
Valeu a ajuda.

Mais uma vez a galera do guj me salvando. Eu ia ficar nisso o dia inteiro.

rafael.augusto
String[] array = new String[]{“0”,“1”,“2”};

//Se você fizer isto acontece o seu erro:

System.out.println(array[3]);

//-----------------------------------------------------------

então, seu array tem tamanho 50 e 49 índices (0 até 49=tamanho 50)

tamanho.lenght é igual a 50

para percorrer um array de tamanho 50 o for não pode passar do índice 49… então…

for(int i=0; i < tamanho.length; i++) { }

Criado 21 de outubro de 2011
Ultima resposta 21 de out. de 2011
Respostas 4
Participantes 4