Fórum Erro em loop, soma com valor errado. #613896
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
Curtir tópico
+ 0Posts
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''
}
}
Gostei + 0
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.
Gostei + 0
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.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)