[RESOLVIDO] Por que o meu programa ignora o meu FOR ?

Boa tarde! Estou com um problema no FOR e já é o segundo programa que da esse erro. Gostaria de saber o que eu estou fazendo de errado. O que acontece é o seguinte: o programa lê o nome, matrícula e as 4 notas do primeiro aluno, porém no momento em que ele vai ler o nome, matrícula e as 4 notas do segundo aluno ele simplesmente pula o nome e pede só a matrícula e as 4 notas. Por que ele faz isso? O que eu estou fazendo de errado?

 for(int i = 0; i < 5; ++i){
           System.out.print("Informe o nome do "+(i+1)+"º aluno: ");
           String nomeAluno = input.nextLine();
           System.out.print("Informe o número da matrícula do "+(i+1)+"º aluno: ");
           int numMatricula = input.nextInt();
           
           double[] notas = new double[4];
           
            for(int j = 0; j < 4; ++j){
                 System.out.println("Informe a "+(j+1)+"º nota do aluno "+nomeAluno+": ");
                 notas[j] = input.nextDouble();   
            }
                 Aluno aluno = new Aluno();
                 aluno.setNome(nomeAluno);
                 aluno.setMatricula(numMatricula);
                 aluno.setNotas(notas);
                 
                 alunos[i] = aluno;
         }

Eu fiz um outra programa de uma agenda onde dentro dessa agenda existem 2 contatos e em cada contato existe um nome, email e telefone e na hora de ler dentro de um FOR o programa pula o nome do primeiro contato e já vai direto para o email e telefone e no segundo contato ele lê tudo certinho, porém no primeiro contato ele só lê a partir do email.

Espero que não tenha ficado muito confuso de entender o meu problema. Valeu!

Prezado @Geralt_Marston
Peguei apenas o seu laço mostrando o System.out.print e executei e ele mostrou as mensagens normalmente desde o primeiro aluno e suas 4 notas até o ultimo.
Acho que o problema está no momento que ele sai do segundo for.

Bom seria ver todo o código, essa classe Aluno como está?
Veja como rodou legal o seu For:

Aqui no meu ele fica assim:

Informe a 4º nota do aluno Alfredo: 
7,2
Informe o nome do 2º aluno: Informe a matrícula do 2º aluno:

A classe Aluno:

 public class Aluno{
 private String nome;
 private String matricula;
 private double[] notas;

 public String getNome(){
  return nome;
}

 public void setNome(String nome){
  this.nome = nome;
}

public String getMatricula(){
 return matricula;
}

public void setMatricula(String matricula){
  this.matricula = matricula;
}

public double[] getNotas(){
 return notas;
}

public void setNotas(double[] notas){
 this.notas = notas;
}
}

@Geralt_Marston
Eu fiz algumas correções no seu código, eu coloquei o Scanner
e ao invés de colocar sc.nextline() eu coloquei o sc.next();
Ele estava passando direto pelo nome do usuário.
Teste no seu projeto para ver se vai dá certo agora, Segue o Código abaixo:

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

    for(int i = 0; i < 5; ++i){
       System.out.println("Informe o nome do "+(i+1)+"º aluno: ");
       String nomeAluno = sc.next();
       System.out.println("Informe o número da matrícula do "+(i+1)+"º aluno: ");
       int numMatricula = sc.nextInt();
       
       double[] notas = new double[4];
       
        for(int j = 0; j < 4; ++j){
             System.out.println("Informe a "+(j+1)+"º nota do aluno "+nomeAluno+": ");
             notas[j] = sc.nextDouble();  
             
        }
            
     }
    
    
    
    // TODO code application logic here
}

Agora foi !! Era uma coisa tão simples kk

Informe a 4º nota do aluno Gabriel: 9,0
Informe o nome do 2º aluno: 

Valeu!

@Geralt_Marston , é verdade, as vezes acontece, é bom sempre testar cada parte de um código pediu para mostrar o que ele está fazendo ou o que a variável está recebendo.

Marque na resposta como obteve solução do seu problema e Edite o titulo do seu Post colocando na frente: [RESOLVIDO] para ficar organizado ok?

Bons Estudos! E Sempre que puder ajude o próximo hein! Abraços! :grinning:

1 curtida

Isso acontece quando você tenta ler uma String logo depois de ter lido um número, isso porque o Scanner guarda o \n do fim da linha após você ler o número. Teste colocar um input.nextLine() logo após o segundo laço for. Substituir o input.nextLine() por input.next() vai te impossibilitar de ler nomes compostos.

for(int i = 0; i < 5; ++i){
       System.out.print("Informe o nome do "+(i+1)+"º aluno: ");
       String nomeAluno = input.nextLine();
       System.out.print("Informe o número da matrícula do "+(i+1)+"º aluno: ");
       int numMatricula = input.nextInt();
       
       double[] notas = new double[4];
       
        for(int j = 0; j < 4; ++j){
             System.out.println("Informe a "+(j+1)+"º nota do aluno "+nomeAluno+": ");
             notas[j] = input.nextDouble();   
        }
input.nextLine();
             Aluno aluno = new Aluno();
             aluno.setNome(nomeAluno);
             aluno.setMatricula(numMatricula);
             aluno.setNotas(notas);
             
             alunos[i] = aluno;
     }
1 curtida

Obrigado!