Dificuldades em leitura com comando for

1. Dificuldades em leitura com comando for

Paulo
phk

(usa Ubuntu)

Enviado em 18/01/2021 - 12:39h

Prazer a todos.
do {
for(i = 0;i < alunos.length;i++) {
System.out.println("Entre com o aluno de nº: ");
alunos[i] = sc.nextInt();
for(j = 0;notas.length<4;j++) {
System.out.println("Entre com a " + j + 1 + " ª do aluno: ");
notas[j] = sc.nextDouble();
soma = soma + notas[j];
cont++;

Estou tendo problemas no for para ler alunos e notas. O primeiro for continua, não consigo fazer ele parar e logo a seguir ler o segundo for para entrar com a nota do aluno, o compilador continua a ler o primeiro for.

Entra com o número do aluno e logo a seguir entra com as notas. São 50 alunos e para cada um desses 50 há 4 notas.

Obrigado.


  


2. Re: Dificuldades em leitura com comando for

Samuel Leonardo
SamL

(usa XUbuntu)

Enviado em 18/01/2021 - 16:26h

Olha, quando for postar novamente, poste o código completo, não apenas o pedaço onde você acha que tá errado porque o erro pode estar bem antes disso.
O que eu posso dizer é apenas adivinhação, já que não vi o código completo. Então, nem sei por onde eu chuto primeiro, prefiro esperar que você poste o código inteiro.
EDIT:
Só uma coisa, esse for é pra ser assim mesmo? Não quis dizer apenas j < notas.length?
for(j = 0;notas.length<4;j++)
____________________________________________
https://nerdki.blogspot.com/ acessa aí vai lá, é grátis!
Capeta (demo) do meu trabalho:
https://cpusam.github.io/
"com o bug fix vem a perfeição"


3. Re: Dificuldades em leitura com comando for

Paulo
phk

(usa Ubuntu)

Enviado em 18/01/2021 - 21:13h

Sim. Obrigado pela sugestão.
package vetores;

import java.util.Scanner;

public class Media_2_vetores {
public static void main(String[] args) {
String[] nome_aluno = new String[50];
double[][] nota_aluno = new double[50][4];
Scanner sc = new Scanner(System.in);
int i,j;
String opcao;

double soma = 0;
String resp = "n";

do {
for(i = 0;i < nome_aluno.length;i++) {
System.out.println("Insira o nome do aluno: ");
nome_aluno[i] = sc.next();
for(j = 0; j<4 ;j++) {
System.out.println("Entre com a " + j + 1 + " ª do aluno: ");
nota_aluno[i][j] = sc.nextDouble();
soma = soma + nota_aluno[i][j];


double media = soma / 4;

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.next();
} while (!opcao.equalsIgnoreCase(resp)); //while ( opcao != 'n'); // só pára se for == 'n'
sc.close();
}
}


4. Re: Dificuldades em leitura com comando for

leandro peçanha scardua
leandropscardua

(usa Ubuntu)

Enviado em 18/01/2021 - 23:05h

phk escreveu:

Sim. Obrigado pela sugestão.
package vetores;

import java.util.Scanner;

public class Media_2_vetores {
public static void main(String[] args) {
String[] nome_aluno = new String[50];
double[][] nota_aluno = new double[50][4];
Scanner sc = new Scanner(System.in);
int i,j;
String opcao;

double soma = 0;
String resp = "n";

do {
for(i = 0;i < nome_aluno.length;i++) {
System.out.println("Insira o nome do aluno: ");
nome_aluno[i] = sc.next();
for(j = 0; j<4 ;j++) {
System.out.println("Entre com a " + j + 1 + " ª do aluno: ");
nota_aluno[i][j] = sc.nextDouble();
soma = soma + nota_aluno[i][j];


double media = soma / 4;

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.next();
} while (!opcao.equalsIgnoreCase(resp)); //while ( opcao != 'n'); // só pára se for == 'n'
sc.close();
}
}

Imagino q deveria ser
for(i = 0;i < 50;i++) {



5. Re: Dificuldades em leitura com comando for

Samuel Leonardo
SamL

(usa XUbuntu)

Enviado em 19/01/2021 - 17:14h

Pelo que observei no seu código, você tá calculando errada a média.
Por exemplo, ali onde tem o

for(i = 0;i < nome_aluno.length;i++) {
System.out.println("Insira o nome do aluno: ");
nome_aluno[i] = sc.next();
for(j = 0; j<4 ;j++) {
System.out.println("Entre com a " + j + 1 + " ª do aluno: ");
nota_aluno[i][j] = sc.nextDouble();
soma = soma + nota_aluno[i][j];

double media = soma / 4;

A média só deve ser calculada quando se tem toda as 4 notas somadas em 'soma'. Ou seja, pra consertar isso, você deve fechar o loop do for ali depois de soma = soma + nota_aluno[i][j];
Assim a média fica fora do loop das notas e então quando fizer media = soma / 4;, soma será a soma das 4 notas, e não apenas de uma como tá agora.

Quanto a ao resto do cogio, ele deve ficar dentro do for de leitura de nome, mas fora do for de notas, isso é apenas o caso ali de cima de fechar o loop das notas.
Só tenha cuidado com ao ler as notas, verifique se ela é >= 0 && <= 10, caso seja, então você deve colocar a nota no vetor de notas. Se não for, o loop não deve avançar, e pedir de novo que digite a nota, fazendo isso até que surja uma nota válida.
Nesse caso, eu sugiro que você use um do {} while ali no for de leitura das notas, basta apenas colocar o nota_aluno[i][j] = sc.nextDouble(); dentro do wo-while e verificar enquanto ele é inválido repetir a leitura.

Acho que isso resolve tudo.



6. Continuação

Paulo
phk

(usa Ubuntu)

Enviado em 22/01/2021 - 12:04h

Resolvi o problema e funciona, porém não consigo entender o motivo para o java não ver o do while. Ele passa direto como se o comando não exististe. E esta linha: System.out.println("Entre com o aluno de número: " + i + 1 + " com a " + j + 1 + " ª nota.");.
Não lê corretamente o j + 1. Imprime 11 em vez de 1. Não entendi. qual o erro. Obrigado.


7. Re: Dificuldades em leitura com comando for

Samuel Leonardo
SamL

(usa XUbuntu)

Enviado em 22/01/2021 - 12:29h

phk escreveu:

Resolvi o problema e funciona, porém não consigo entender o motivo para o java não ver o do while. Ele passa direto como se o comando não exististe. E esta linha: System.out.println("Entre com o aluno de número: " + i + 1 + " com a " + j + 1 + " ª nota.");.
Não lê corretamente o j + 1. Imprime 11 em vez de 1. Não entendi. qual o erro. Obrigado.

Estou ocupado no momento mas vou responder só essa a por último:
e que o java concatena strings com o '+' e por isso, se quiser o resultado de uma expressão, tem que colocar ela entre parenteses.
Sendo assim:
isso:
int i = 1;
System.out.println("i+1 = "+i+1);
É diferente disso:
int i = 1;
System.out.println("(i+1) = "+(i+1));

____________________________________________
https://nerdki.blogspot.com/ acessa aí vai lá, é grátis!
Capeta (demo) do meu trabalho:
https://cpusam.github.io/
"com o bug fix vem a perfeição"


8. Re: Dificuldades em leitura com comando for

Paulo
phk

(usa Ubuntu)

Enviado em 02/02/2021 - 21:12h

package vetores;
import java.util.Scanner;

public class mediavetores2
{
public static void main(String[] args)
{
String[] nome_aluno = new String[50];
double[] notas_aluno = new double[4];

boolean opcao = true;
String resp = " ";

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();

while(opcao)
{
int j;
double media = 0,soma = 0;
for(j = 0; j<notas_aluno.length ;j++)
{
System.out.println("Entre com a " + (j + 1) + " ª nota do aluno: " + (i + 1));
notas_aluno[j] = Double.parseDouble(sc.nextLine());//converte texto em número.
soma = soma + notas_aluno[j];
}

media = soma / notas_aluno.lenght;

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>: ");
resp = sc.next();
if(resp.equalsIgnoreCase("s"))
opcao = false;
break;
}
}
}while(opcao);
System.out.print("Deseja Continuar? <s/n>: ");
resp = sc.next();
if(resp.equalsIgnoreCase("s"))
opcao = false;
sc.next();

}
}
Bem, código definitivo.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts