Olá pessoal sou novo no fórum e estou com uma ou melhor duas duvidas em um código fonte de java no qual faz o seguinte: desenvolver uma classe Aluno que está abaixo
public class Aluno {
private String nome;
private double[] nota;
final int qNotas = 3;
public String getNome(){
return nome;
}
public void setNome(String nome){
this.nome = nome;
}
public Aluno(String nome, double n1, double n2, double n3){
this.nome = nome;
this.nota = new double[qNotas];
this.nota[0] = n1;
this.nota[1] = n2;
this.nota[2] = n3;
}
public double media(){
double soma = 0;
for(double v: this.nota)
soma = soma + v;
return soma / qNotas;
}
public String toString(){
String s = "Nome: "+this.nome+" \n Notas: ";
for(double v: this.nota)
s = s + v+", ";
s = s +" \n Media: "+media();
return s;
}
}
O primeiro é o seguinte: o problema está no main pois o mesmo entra em loop infinito. A função do programa é a seguinte pedir para o usuário digitar o nome de um aluno e três notas e armazenar em um ArrayList até que o nome seja diferente de fim. No entanto o programa pede para digitar pela primeira vez o nome se for diferente do fim entra no loop mas não sai pois apos ele ler as três notas ele pede para digitar o nome novamente mas logo em seguida sem nem mesmo ler o nome solicita para digitar as três notas novamente.
Desde já agradeço!
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;
public class TestaAluno {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
ArrayList<Aluno> turma = new ArrayList<Aluno>();
String nome;
double n1, n2, n3;
System.out.println("Digigte o nome do aluno: ");
nome = s.nextLine();
//loop infinito
while(nome.equals("fim") == false){
System.out.println("Digite a nota 1 do aluno: ");
n1 = s.nextDouble();
System.out.println("Digite a nota 2 do aluno: ");
n2 = s.nextDouble();
System.out.println("Digite a nota 2 do aluno: ");
n3 = s.nextDouble();
Aluno a = new Aluno(nome, n1, n2, n3);
a.setNome(nome);
a.media();
turma.add(a);
System.out.println("Digite o nome do aluno: ");
nome = s.nextLine();
//solicita que o usuário digite mas não lê
}
Iterator<Aluno> it = turma.iterator();
while(it.hasNext() == true){
System.out.println("Nome: "+it.next().getNome()+" Media: "+it.next().media());
}
}
}
Um teste para visualização do problema
Digigte o nome do aluno:
diego
Digite a nota 1 do aluno:
10
Digite a nota 2 do aluno:
9
Digite a nota 2 do aluno:
7
Digite o nome do aluno:
Digite a nota 1 do aluno:
Observem que não consigo digitar o nome pois imediatamente se pede a nota novamente.