Meu loop trava na primeira linha depois da leitura do inteiro

import java.io.IOException;
import java.util.Scanner;
import java.lang.Math;

public class prova{

	public static void main(String[]args) throws IOException {
	Scanner teclado = new Scanner(System.in);


		char [] prova = new char[5];
		char [] gabarito = new char[5];
		int resultado;
		int alunos;

			System.out.println("numero de alunos");
			alunos = teclado.nextInt();



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

				System.out.println("digite a questao numero "+ (i+1) +" do gabarito da prova");
				gabarito[i] = teclado.nextLine().charAt(0);

				}


		

			

			for(int j = 0; j< 2; j++){

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

				System.out.println("digite a questao numero "+ (i+1) +" da prova");
				prova[i] = teclado.nextLine().charAt(0);

			}

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

				if(gabarito[i] == prova[i]){

					resultado++;


				}

			}

			System.out.println("o resultado da prova eh "+ resultado);

		}

		}
	}	

aparece a mensagem numero de alunos 2

Exception in thread “main” java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.base/java.lang.StringLatin1.charAt(Unknown Source)
at java.base/java.lang.String.charAt(Unknown Source)
at prova.main(prova.java:24)

fala @victor1996costa, primeiramente bem vindo ao fórum do GUJ, espero que possamos te ajudar durante sua jornada de programação.

Quanto a sua dúvida, eu baixei seu código aqui na máquina e fiz um ajuste apenas para ele executar (na verdade foram 2), ao invés de usar o nextLine(), deixei apenas o next(). Não sei explicar exatamente porque esse comportamento já que nunca usei a classe Scanner para input de dados, mas fico lhe devendo uma pesquisada com calma (pode me cobrar se precisar).

Porém, alguns outros ajustes precisam ser feitos no seu código , o loop fixo do j<2 espero que seja só pra testar, afinal sua variável alunos não está servindo pra nada nesse caso já que se eu colocar 1 ou 50 sempre o loop executará 2 vezes.

No mais, está funcional e creio que esse ajuste já dá pra continuar os estudos… :wink:

Abraços e bons estudos.

[EDIT] - Agora ignore quase tudo o que eu lhe disse anterioemente. Fiquei encucado com essa questão e fui me aprofundar na API do Scanner,a diferença de next pra nextLine é que o primeiro pega a String até encontrar um espaço e o segundo pega a String completa, voltei para o nextLine e seu código executou, então entendi um detalhe que eu alterei que fez funcionar. Anteriormente, como vi que seu alunos não estava sendo utilizado pra nada, eu limpei seu código retirando o teclado.nextInt() e isso deixou o seu teclado limpo pra receber as questões da prova e do gabarito. então pra funcionar na verdade, apenas para seus testes, antes de entrar no loop for() crie uma nova instância de Scanner para o seu teclado fazendo [teclado = new Scanner(System.in);]

1 curtida