Erro Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 100 out of bounds for length 100

Pessoal ao tentar executar a opção 3, 4 e5 apresenta o erro Erro Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: Index 100 out of bounds for length 100 podem me explicar pq?

  • Classe retângulo
public class Retangulo {
	
	private int base, altura;

	public int getBase() {
		return base;
	}

	public void setBase(int base) {
		this.base = base;
	}

	public int getAltura() {
		return altura;
	}

	public void setAltura(int altura) {
		this.altura = altura;
	}
	
	
	public int area() {
		return base * altura;
	}
	
	public boolean isQuadrado() {
		return base == altura;
	}
	
	public boolean eIgual(Retangulo r) {
		return r.getAltura() == this.altura && r.getBase() == this.base;
	}
	
	public void desenhar() {
		
		for(int x = 1; x <= altura; x++) {
			System.out.println();
			
			for(int y = 1; y <= base; y++) {
				System.out.print("O");
			}
		}
	}
}
  • Main da classe
import java.util.Scanner;

import Respostas.Retangulo;

public class Menu {

	public static void main(String[] args) {
		
		Scanner input = new Scanner(System.in);
		
		Retangulo r = new Retangulo();
		Retangulo[] array = new Retangulo[100];
		
		int cont = 0;
		String opcao = "";
		while(!opcao.equalsIgnoreCase("s")) {
			
			System.out.println("1 - Cadastrar retângulo\r\n"
					+ "2 - Desenhar um retângulo guardado em uma posição específica\r\n"
					+ "3 - Encontrar o retângulo de maior área\r\n"
					+ "4 - Encontrar o retângulo de menor área\r\n"
					+ "5 - Informar a quantidade de retângulos cadastrados\r\n"
					+ "S - Sair");
			opcao = input.nextLine();
			
			switch(opcao) {
			
				case "1":

					System.out.println("Base: ");
					int base = Integer.parseInt(input.nextLine());
					r.setBase(base);
					System.out.println("Altura: ");
					int altura = Integer.parseInt(input.nextLine());
					r.setAltura(altura);
					if(cont == 100) {
						System.out.println("Números validos de retângulos cadastrados exedido!");
					}else {
						array[cont] = r;
						cont++;
					}
					
					break;
					
				case "2":
					
					System.out.println("Qual retângulo deseja acessar?");
					int acessar = Integer.parseInt(input.nextLine());
					
					for(int i = 0; i <= array.length; i++) {
						if(i == acessar) {
							if(array[i] != null) {
								array[i].desenhar();
								System.out.println();
							}else {
								System.out.println("O indice está vazio!!");
							}
						}
					}
					
					break;
				
				case "3":
					
					int maior = 0;
					
					for(int i = 0; i<= array.length;i++) {
						if(array[i] != null) {
							if(array[maior].area() < array[i].area()) {
								maior = i;
							}
						}
					}
					
					
					System.out.println("O maior retângulo está na posição " + maior);
					break;
			
			case "4":
				int menor = 0;
				
				for(int i = 0; i<= array.length;i++) {
					if(array[i] != null) {
						if(array[menor].area() > array[i].area()) {
							menor = i;
						}
					}
				}
				
				
				System.out.println("O maior retângulo está na posição " + menor);
				break;
				
			case "5":
				
				int num = 0;
				
				for(int i = 0; i<= array.length;i++) {
					if(array[i] != null)
						num ++;
				}
				
				System.out.printf("Foram cadastrados %d retângulos!\n", num);
				break;
				
			}
		}
	}
}

Quando vc inicia um array assim:

Retangulo[] array = new Retangulo[100];

ele terá 100 posições, ou seja, o indice vai até 99, pois a posição inicial é ZERO.

No for da opção 3, vc tem na condição: i <= array.length, ou seja: até que o indice i vá até 100 (por causa do menor ou igual <=). Porém, o indice vai até 99 apenas. Por isso dá o erro.

1 curtida

Foi sim eu encontrei o erro rs obrigado!!!

1 curtida

Maravilha! Qualquer dúvida, soh postar! Vlw!