Erro em loop, soma com valor errado.
26/01/2021
0
import java.util.Scanner;
public class Media_2_vetores
{
public static void main(String[] args)
{
String[] nome_aluno = new String[50];
double[] notas_aluno = new double[5];
int j;
String opcao;
//boolean opcao = true;
String resp = "n";
double media = 0,soma = 0, cont =0;
Scanner sc = new Scanner(System.in);
do
{
for(int i = 0;i < nome_aluno.length;i++)
{
System.out.println("Insira o nome do aluno: ");
//nome_aluno[i] = sc.nextLine();
for(j = 0; j<4 ;j++)
{
System.out.println("Entre com a " + (j + 1) + " ª nota do aluno: " + (i + 1));
nome_aluno[i] = sc.nextLine();
notas_aluno[j] = sc.nextDouble();
soma = soma + notas_aluno[j];
cont++;
}
media = (soma / 5);
String aproveitamento = "";
if (media >= 9 && media <= 10){
aproveitamento = "A";
} else if (media >= 7.5 && media < 9){
aproveitamento = "B";
} else if (media >= 6 && media < 7.5){
aproveitamento = "C";
} else if (media >= 4 && media < 6){
aproveitamento = "D";
} else if (media >= 0 && media < 4){
aproveitamento = "E";
}
System.out.println("Média: " + media);
System.out.println("Conceito: " + aproveitamento);
switch(aproveitamento)
{
case "A":
case "B":
case "C": System.out.println("APROVADO"); break;
case "D":
case "E": System.out.println("REPROVADO"); break;
}
//System.out.print("Deseja Continuar? <s/n>: ");
//opcao = sc.nextLine();
sc.nextLine();
}
System.out.print("Deseja Continuar? <s/n>: ");
//if (resp == false)
opcao = sc.nextLine();
} while (!opcao.equalsIgnoreCase(resp)); //while ( opcao != ''n''); // só pára se for == ''n''
}
}
Prazer, fiz um debug, pois percebi que após a primeira iteração, o compilador não esta fazendo corretamente o cálculo da média. Ele soma, por exemplo, a partir da segunda iteração, se eu colocar 7 +8 +9 +8 = 32. Quando vi o resultado da variável soma, esta está com o valor de 142. Não sei se tem lixo na memória por causa da primeira iteração ou alguma outra coisa que ocasiona este erro. Obrigado.
Paulo
Posts
26/01/2021
Emerson Nascimento
package vetores; import java.util.Scanner; public class Media_2_vetores { public static void main(String[] args) { String[] nome_aluno = new String[50]; double[] notas_aluno = new double[5]; int j; String opcao; //boolean opcao = true; String resp = "n"; double media = 0, soma = 0, cont =0; Scanner sc = new Scanner(System.in); do { for(int i = 0;i < nome_aluno.length;i++) { System.out.println("Insira o nome do aluno: "); nome_aluno[i] = sc.nextLine(); soma = 0; // reinicia o conteúdo de soma for(j = 0; j<4 ;j++) { System.out.println("Entre com a " + (j + 1) + " ª nota do aluno: " + (i + 1)); // nome_aluno[i] = sc.nextLine(); notas_aluno[j] = sc.nextDouble(); soma = soma + notas_aluno[j]; cont++; } media = (soma / 5); String aproveitamento = ""; if (media >= 9 && media <= 10) { aproveitamento = "A"; } else if (media >= 7.5 && media < 9) { aproveitamento = "B"; } else if (media >= 6 && media < 7.5) { aproveitamento = "C"; } else if (media >= 4 && media < 6) { aproveitamento = "D"; } else if (media >= 0 && media < 4) { aproveitamento = "E"; } System.out.println("Média: " + media); System.out.println("Conceito: " + aproveitamento); switch(aproveitamento) { case "A": case "B": case "C": System.out.println("APROVADO"); break; case "D": case "E": System.out.println("REPROVADO"); break; } //System.out.print("Deseja Continuar? <s/n>: "); //opcao = sc.nextLine(); sc.nextLine(); } System.out.print("Deseja Continuar? <s/n>: "); //if (resp == false) opcao = sc.nextLine(); } while (!opcao.equalsIgnoreCase(resp)); //while ( opcao != ''n''); // só pára se for == ''n'' } }
26/01/2021
Paulo
package vetores; import java.util.Scanner; public class Media_2_vetores { public static void main(String[] args) { String[] nome_aluno = new String[50]; double[] notas_aluno = new double[5]; int j; String opcao; //boolean opcao = true; String resp = "n"; double media = 0, soma = 0, cont =0; Scanner sc = new Scanner(System.in); do { for(int i = 0;i < nome_aluno.length;i++) { System.out.println("Insira o nome do aluno: "); nome_aluno[i] = sc.nextLine(); soma = 0; // reinicia o conteúdo de soma for(j = 0; j<4 ;j++) { System.out.println("Entre com a " + (j + 1) + " ª nota do aluno: " + (i + 1)); // nome_aluno[i] = sc.nextLine(); notas_aluno[j] = sc.nextDouble(); soma = soma + notas_aluno[j]; cont++; } media = (soma / 5); String aproveitamento = ""; if (media >= 9 && media <= 10) { aproveitamento = "A"; } else if (media >= 7.5 && media < 9) { aproveitamento = "B"; } else if (media >= 6 && media < 7.5) { aproveitamento = "C"; } else if (media >= 4 && media < 6) { aproveitamento = "D"; } else if (media >= 0 && media < 4) { aproveitamento = "E"; } System.out.println("Média: " + media); System.out.println("Conceito: " + aproveitamento); switch(aproveitamento) { case "A": case "B": case "C": System.out.println("APROVADO"); break; case "D": case "E": System.out.println("REPROVADO"); break; } //System.out.print("Deseja Continuar? <s/n>: "); //opcao = sc.nextLine(); sc.nextLine(); } System.out.print("Deseja Continuar? <s/n>: "); //if (resp == false) opcao = sc.nextLine(); } while (!opcao.equalsIgnoreCase(resp)); //while ( opcao != ''n''); // só pára se for == ''n'' } }
Valeu, obrigado. Agora fica resolvido e sei que tenho de zerar a variável dentro do loop para não trazer lixo. Lembrando que eu poderia ter dado um flush também. Lembrei disso, mas não sei se funciona.
26/01/2021
Paulo
package vetores; import java.util.Scanner; public class Media_2_vetores { public static void main(String[] args) { String[] nome_aluno = new String[50]; double[] notas_aluno = new double[5]; int j; String opcao; //boolean opcao = true; String resp = "n"; double media = 0, soma = 0, cont =0; Scanner sc = new Scanner(System.in); do { for(int i = 0;i < nome_aluno.length;i++) { System.out.println("Insira o nome do aluno: "); nome_aluno[i] = sc.nextLine(); soma = 0; // reinicia o conteúdo de soma for(j = 0; j<4 ;j++) { System.out.println("Entre com a " + (j + 1) + " ª nota do aluno: " + (i + 1)); // nome_aluno[i] = sc.nextLine(); notas_aluno[j] = sc.nextDouble(); soma = soma + notas_aluno[j]; cont++; } media = (soma / 5); String aproveitamento = ""; if (media >= 9 && media <= 10) { aproveitamento = "A"; } else if (media >= 7.5 && media < 9) { aproveitamento = "B"; } else if (media >= 6 && media < 7.5) { aproveitamento = "C"; } else if (media >= 4 && media < 6) { aproveitamento = "D"; } else if (media >= 0 && media < 4) { aproveitamento = "E"; } System.out.println("Média: " + media); System.out.println("Conceito: " + aproveitamento); switch(aproveitamento) { case "A": case "B": case "C": System.out.println("APROVADO"); break; case "D": case "E": System.out.println("REPROVADO"); break; } //System.out.print("Deseja Continuar? <s/n>: "); //opcao = sc.nextLine(); sc.nextLine(); } System.out.print("Deseja Continuar? <s/n>: "); //if (resp == false) opcao = sc.nextLine(); } while (!opcao.equalsIgnoreCase(resp)); //while ( opcao != ''''n''''); // só pára se for == ''''n'''' } }
Valeu, obrigado. Agora fica resolvido e sei que tenho de zerar a variável dentro do loop para não trazer lixo. Lembrando que eu poderia ter dado um flush também. Lembrei disso, mas não sei se funciona.
Clique aqui para fazer login e interagir na Comunidade :)