[RESOLVIDO ]Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 100000 at blogdoprofessor.VetorDeStrings.main(VetorDeStrings.java:25)

Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 100000
at blogdoprofessor.VetorDeStrings.main(VetorDeStrings.java:25)

Quero solicitar que o usuário entre com os valores para preencher o Array, mas está dando esta exceção:

“Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 100000
at blogdoprofessor.VetorDeStrings.main(VetorDeStrings.java:25)”

package blogdoprofessor;

import javax.swing.JOptionPane;

public class VetorDeStrings {

	
	public static String linearString (String vet[], String procurada) {
		for (int i=0; i<=vet.length; i++) {
			return vet[i];
		}
	
	return "";
}

	
	public static void main(String[] args) {
		int cont=0;
		String inserida = JOptionPane.showInputDialog("Insira a " +cont+ " String: "
				+ "\n 0 encerra.");
		int a = 10000;
		String [] vetString = new String [a];
		
		
		while (!inserida.equals("Hello")) {
			vetString[cont] = inserida;
			cont++;
		}
	
		linearString(vetString, inserida);
		
	}
}

Se vc cria um array com capacidade para 10 elementos, vc pode acessá-los do indice 0 até o 9. Se tentar acessar o indice 10, uma exceção será lançada (ArrayIndexOutOfBoundsException).

int[] array = new int[10];
array[0] = 1;  // ok
array[1] = 2;  // ok
array[2] = 3;  // ok
array[3] = 4;  // ok
array[4] = 5;  // ok
array[5] = 6;  // ok
array[6] = 7;  // ok
array[7] = 8;  // ok
array[8] = 9;  // ok
array[9] = 10; // ok
array[10] = 1; // Erro: ArrayIndexOutOfBoundsException

No seu caso, tenho quase certeza de que o problema está sendo causado por essa linha:

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

Substitua por:

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

Vc não quer que o loop seja executado até que i seja igual que vet.length. Pois se o array tem length 10 e vc acessar o indice 10, estará extrapolando os limites.

Por isso o loop tem que ser executado apenas enquanto i for menor que o length, não mais que isso.

1 curtida

Imaginei que fosse exatamente isso, mas mesmo com a proposta sugerida por você, o erro persiste… até se eu nao deixar o método linearString executar, dá o erro mesmo para inserir a linha da posição 1 do Array, mesmo eu tendo declarado o mesmo com tamanho 10000.

Posta o código que você reescreveu.

Já entendi. O problema principal é o seu while.

Vc tá dizendo “enquando inserida for diferente de hello, faça”.

Aí vc pede a string pro usuário apenas uma vez fora desse loop, logo, inserida nunca vai ser igual a “hello” e parar.

Vc tem que pedir a string pro usuario dentro do loop. É importante também colocar um limite baseado no seu contador e no tamanho do array.

Fiz uma correção no seu main:

public static void main(String[] args) {
    int cont = 0, a = 5;
    String[] vetString = new String[a];
    String inserida = "";

    while (!inserida.equals("0") && cont < a) {
        inserida = JOptionPane.showInputDialog("Insira a " +cont+ " String: "
                + "\n 0 encerra.");
        vetString[cont] = inserida;
        cont++;
    }

    linearString(vetString, inserida);

}
1 curtida