Só pra explicar de forma mais detalhada, no primeiro for
tem um ;
sobrando:
// aqui
// ▼
for(count = 0; count < vetorA.length; count++);{
vetorA[count] = gerarAleatorio.nextInt(2500);
}
Basicamente, esse ;
faz com que o for
fique “vazio”, sem nada dentro dele. E o que vem a seguir acaba sendo um bloco independente, que é executado apenas uma vez.
Faça o teste, o código abaixo imprime “oi” apenas uma vez:
for (int count = 0; count < 1000; count++);{
System.out.println("oi"); // vai imprimir apenas uma vez
}
Isso porque o ;
depois do for
faz com que dentro do for
não tenha nada. É basicamente isso:
// ter um ; depois do for é o mesmo que ter um bloco vazio
// por isso os dois loops abaixo são equivalentes (ambos não fazem nada)
for (int count = 0; count < 1000; count++);
for (int count = 0; count < 1000; count++) {
}
// o próximo bloco é independente, não faz parte do for
{
System.out.println("oi");
}
E o que vem a seguir é um bloco “solto”, independente, que não faz parte do for
. Apesar de não ser muito comum, é um código perfeitamente válido, que compila e roda sem problemas.
No seu caso, então temos um for
que não faz nada, e ao final dele o valor de count
será 10
. A seguir, temos o bloco independente, que tenta acessar a posição 10 do array. Mas como as posições dele vão de 0 a 9, dá o erro.
Mas não para por aí. O que acontece se o array só tiver números ímpares? Ele vai incrementar countW
até que o valor seja 10, e ao tentar imprimir a mensagem final, vai tentar acessar esta posição e dará erro do mesmo jeito.
O correto é imprimir a mensagem somente se foi encontrado um número par. Também dá pra simplificar os dois primeiros loops, não precisa de um pra gerar os números e outro pra imprimir.
E como já disseram, não precisa declarar todas as variáveis no início, isso é uma prática que fazia sentido há algumas décadas, mas hoje o recomendado é declarar o mais próximo de onde são usadas (isso também ajuda a delimitar o escopo).
Ou seja, poderia ser:
int vetorA[] = new int[10];
Random gerarAleatorio = new Random();
for (int i = 0; i < vetorA.length; i++) {
// dá pra gerar e imprimir no mesmo loop
vetorA[i] = gerarAleatorio.nextInt(2500);
System.out.printf("No índice %d o valor gerado foi: %d\n", i, vetorA[i]);
}
int indicePar = -1;
for (int i = 0; i < vetorA.length; i++) {
if (vetorA[i] % 2 == 0) {
indicePar = i;
break; // se já achei, interrompe o for
}
}
// imprime a mensagem de acordo com o resultado
if (indicePar >= 0) {
System.out.printf("Foi encontrado o número par %d no índice %d\n", vetorA[indicePar], indicePar);
} else {
System.out.println("Nenhum número par encontrado");
}
E também daria pra fazer tudo no mesmo loop, basta adaptar um pouco a lógica:
int vetorA[] = new int[10];
Random gerarAleatorio = new Random();
int indicePar = -1;
for (int i = 0; i < vetorA.length; i++) {
vetorA[i] = gerarAleatorio.nextInt(2500);
if (indicePar == -1 && vetorA[i] % 2 == 0) { // se o número é par e ainda não foi encontrado nenhum
indicePar = i;
}
System.out.printf("No índice %d o valor gerado foi: %d\n", i, vetorA[i]);
}
// imprime a mensagem de acordo com o resultado
if (indicePar >= 0) {
System.out.printf("Foi encontrado o número par %d no índice %d\n", vetorA[indicePar], indicePar);
} else {
System.out.println("Nenhum número par encontrado");
}