ArrayIndexOutOfBoundsException - Não consigo arrumar

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

[code]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;
}

}[/code]

Um exemplo que eu tentei utilizar

[code]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);

}

}[/code]

o erro gerado foi:

[quote]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)

[/quote]

Desde ja, agradeço a ajuda de todos.

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.

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!

1 curtida

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.

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++) { }