O que tem de errado nessa classe?

13 respostas
alexandref93
import java.util.Scanner;

public class CalculandoMedia {
public static void main(String [] principal){
	Scanner leia = new Scanner(System.in);

	int aluno = 0;
	int y = 0;
	int[] notas = new int[10];
	String[] alunos = new String[10];
	String pergunta = "Digite o nome do aluno: ";
	String media = "Digite nota dele:";

	while (aluno!=10) {
	System.out.println(pergunta);
	alunos[aluno] = leia.nextLine();
	System.out.println(media);
	notas[y] = leia.nextInt();
	aluno++;
	y++;	
	}

	aluno = 0;
	y = 0;
		
	while (aluno!=10) {
	System.out.println(alunos[aluno]);
	System.out.println(notas[y]);
	aluno++;
	y++;		
	} 

		


}
}

Ele só pede o nome do aluno uma vez, depois só pede nota, até o int aluno for igual 10, o que será???

13 Respostas

dxos

Assim:// linha 16: //em vez de alunos[aluno] = leia.nextLine(); //use alunos[aluno] = leia.next();ABS …

alexandref93

vlw, agora consegui!

Obrigado pela atenção!!!

ViniGodoy

Cuidado.

Ao ler do Console, o único método que você deve usar na classe Scanner é o nextLine(). Toda sequência no console é terminada por \n. Inclusive a entrada de inteiros. O seu programa dava problema pois o nextInt() lê o inteiro e deixa o \n que vem depois dele no scanner. No próximo nextLine() ele encontra o \n e pensa que o usuário digitou uma linha vazia.

Eis o código corrigido:
import java.util.Scanner;  
   public class CalculandoMedia {  
      public static void main(String [] principal){  
         Scanner leia = new Scanner(System.in);  

         String[] alunos = new String[10];  
         int[] notas = new int[10];  

         for (int aluno = 0; aluno < 10; aluno++) {  
            System.out.println("Digite o nome do aluno: ");  
            alunos[aluno] = leia.nextLine();  
            System.out.println("Digite nota dele:");  
            notas[aluno] = Integer.parseInt(leia.nextLine());
         }  

         for (int aluno = 0; aluno < 10; aluno++) {
            System.out.println(alunos[aluno]);  
            System.out.println(notas[aluno]);  
            aluno++;  
         }
   }
}
dxos

ViniGodoy:
Cuidado.

Ao ler do Console, o único método que você deve usar na classe Scanner é o nextLine(). Toda sequência no console é terminada por \n. Inclusive a entrada de inteiros. O seu programa dava problema pois o nextInt() lê o inteiro e deixa o \n que vem depois dele no scanner. No próximo nextLine() ele encontra o \n e pensa que o usuário digitou uma linha vazia.

Interessante não sabia que o nextInt() deixava esse lixo para traz…
Valeu ViniGodoy :smiley:

alexandref93
ViniGodoy:
Cuidado.

Ao ler do Console, o único método que você deve usar na classe Scanner é o nextLine(). Toda sequência no console é terminada por \n. Inclusive a entrada de inteiros. O seu programa dava problema pois o nextInt() lê o inteiro e deixa o \n que vem depois dele no scanner. No próximo nextLine() ele encontra o \n e pensa que o usuário digitou uma linha vazia.

Eis o código corrigido:
import java.util.Scanner;  
   public class CalculandoMedia {  
      public static void main(String [] principal){  
         Scanner leia = new Scanner(System.in);  

         String[] alunos = new String[10];  
         int[] notas = new int[10];  

         for (int aluno = 0; aluno < 10; aluno++) {  
            System.out.println("Digite o nome do aluno: ");  
            alunos[aluno] = leia.nextLine();  
            System.out.println("Digite nota dele:");  
            notas[aluno] = Integer.parseInt(leia.nextLine());
         }  

         for (int aluno = 0; aluno < 10; aluno++) {
            System.out.println(alunos[aluno]);  
            System.out.println(notas[aluno]);  
            aluno++;  
         }
   }
}

mais como assim terminada por \n???

dxos

como rapida explicação é o pula linha, ou seja, o “enter” que vc usa para confirmar o digitado, pelo que o ViniGodoy comentou, o readInt() deixa ele para traz, não limpando o \n que foi inserido com o seu “enter”, ai quando ele pede denovo o nextLine(), e verifica ali um \n e considera que você quiz inserir um campo vazio.

alexandref93

ahhh, blz, agora entendi, vlw pela explicação!!

Obrigado pela atenção!!!

alexandref93

mais esse pequeno detalhe é pelo fato de ser comando de linha correto???

dxos

± sim :smiley:

alexandref93

blz!!!

alexandref93

arrumei o código aqui, mais o estranho que ele só me pede 5 vezes pra digitar o nome em vez de 10 vezes!!!
o que será???

dxos
Testei aqui e funcionou certo... Inseriu os 10 e exibiu os 10 também :D
import java.util.Scanner;
public class CalculandoMedia {     
   public static void main(String [] principal){     
      Scanner leia = new Scanner(System.in);     

      String[] alunos = new String[10];     
      int[] notas = new int[10];     

      for (int aluno = 0; aluno < 10; aluno++) {     
         System.out.println("Digite o nome do aluno: ");     
         alunos[aluno] = leia.nextLine();     
         System.out.println("Digite nota dele:");     
         notas[aluno] = Integer.parseInt(leia.nextLine());   
      }     

      for (int aluno = 0; aluno < 10; aluno++) {   
         System.out.println(alunos[aluno]);     
         System.out.println(notas[aluno]);     
         aluno++;     
      }   
}   
}
alexandref93
dxos:
Testei aqui e funcionou certo... Inseriu os 10 e exibiu os 10 também :D
import java.util.Scanner;
public class CalculandoMedia {     
   public static void main(String [] principal){     
      Scanner leia = new Scanner(System.in);     

      String[] alunos = new String[10];     
      int[] notas = new int[10];     

      for (int aluno = 0; aluno < 10; aluno++) {     
         System.out.println("Digite o nome do aluno: ");     
         alunos[aluno] = leia.nextLine();     
         System.out.println("Digite nota dele:");     
         notas[aluno] = Integer.parseInt(leia.nextLine());   
      }     

      for (int aluno = 0; aluno < 10; aluno++) {   
         System.out.println(alunos[aluno]);     
         System.out.println(notas[aluno]);     
         aluno++;     
      }   
}   
}

agora foi :D

Criado 8 de agosto de 2010
Ultima resposta 9 de ago. de 2010
Respostas 13
Participantes 3