Erro ao ler dados com classe scanner

8 respostas
FlavioA

Olá galera estou com o um probleminha neste código onde não consigo achar o erro no mesmo gostaria da ajuda de vocês
estou fazendo este algoritmo para ler o nome do aluno preencher o vetor de nomes e também preciso preencher um vetor
com as médias de cada aluno, pra isso utilizo a classe scanner para interação com o usuário mas depois que pede a primeira
nota ele lança o erro InputMismatchException e eu não sei porque. Alguém pode me ajudar? Desde já sou grato.

import java.util.Scanner;

public class MediaComVetor {

	public static void main(String[] args) {
		Scanner ler = new Scanner(System.in);
		String[] nomes = new String[5];
		double[] media = new double[5];
		String x, y, z;
		double n1, n2, n3, mediaDoAluno;

		for (int i = 0; i < nomes.length; i++) {
			System.out.print("Informe o nome do aluno: ");
			x = ler.next();
			nomes[i] = x;
			
			System.out.print("Digite a primeira nota do aluno: " + x);
			n1 = ler.nextDouble();
			System.out.print("Digite a segunda nota do aluno: " + x);
			n2 = ler.nextDouble();
			System.out.print("Digite a terceira nota do aluno: " + x);
			n3 = ler.nextDouble();
			mediaDoAluno = n1 + n2 + n3 / 3;
			media[i] = mediaDoAluno;
			System.out.print(" A média do aluno " + nomes[i] + " é: "
					+ media[i]);
		}
 
	}
}

8 Respostas

ybadoo

FlavioA,

Executei o seu código e rodou perfeitamente.

Utilizei o JavaSE-1.6 (java-6-openjdk-amd64) na execução.

Você passar outras informações a respeito do seu ambiente de desenvolvimento/produção?

Até mais!

Cristiano
(www.ybadoo.com.br/)

FlavioA

caro amigo uso o JDK e como IDE o Eclipse sempre precisei
apenas disso para rodar não entendi a razão do erro.

não entendi porque no seu ambiente rodou.

Tenso.

ybadoo

FlavioA,

Insira o seguinte código, logo após a declaração do Scanner:

ler.useDelimiter("\n");

Assim você dirá para ele que o seu texto termina com o ENTER.

Outra coisa, o cálculo da sua média está errado, pois você está dividindo apenas a última nota por 3, e não a somatória das três notas…questão de precedência de operadores.

Até mais!

Ybadoo
http://www.ybadoo.com.br/

FlavioA

Olá amigo fiz as correções do seu comentário
e mesmo assim deu o mesmo erro. Por que será?

ybadoo

FlavioA,

Qual são os valores de entrada que você está utilizando para testar?!?

No meu caso, estou utilizando o seguinte:
Fulano da Silva
1
2
3

Ciclano da Silva
1,1
2,2
3,3

Se você reparar, no meu caso o número real está sendo fornecido com vírgula, ao invés de ponto, pois o Java está considerando o locale da minha máquina, que é o português.

Se eu fornecer o número real com ponto, como 1.1, ele me apresenta a exceção considerada.

Até mais!

Ybadoo
http://www.ybadoo.com.br/

FlavioA

caro amigo preenchi as notas tanto com vírgulas quanto com ponto
mesmo assim acontece o mesmo erro. Não entendo.

ybadoo

FlavioA,

Essa exceção ocorre por que o scanner não está conseguindo converter o valor fornecido por você num double, mas não sei o que pode estar dando de errado na sua estação.

Segue o código que estou utilizando nos testes, que basicamente é o seu código, com pequenas alterações:

package teste;

import java.util.Scanner;  

public class MediaComVetor {  
  
    public static void main(String[] args) {  
        Scanner ler = new Scanner(System.in);
        ler.useDelimiter("\n");
        String[] nomes = new String[5];  
        double[] media = new double[5];  
        String x;  
        double n1, n2, n3, mediaDoAluno;  
  
        for (int i = 0; i < nomes.length; i++) {  
            System.out.print("Informe o nome do aluno: ");
            x = ler.next();
            nomes[i] = x;
              
            System.out.print("Digite a primeira nota do aluno " + x + ": ");
            n1 = ler.nextDouble();  
            System.out.print("Digite a segunda nota do aluno " + x + ": ");
            n2 = ler.nextDouble();  
            System.out.print("Digite a terceira nota do aluno " + x + ": ");
            n3 = ler.nextDouble();  
            mediaDoAluno = (n1 + n2 + n3) / 3.0;  
            media[i] = mediaDoAluno;  
            System.out.print("A média do aluno " + nomes[i] + " é: " + media[i] + "\n\n");  
        }
    }
}

E a execução do mesmo para três indivíduos:

Informe o nome do aluno: Fulano da Silva
Digite a primeira nota do aluno Fulano da Silva: 1
Digite a segunda nota do aluno Fulano da Silva: 2
Digite a terceira nota do aluno Fulano da Silva: 3
A média do aluno Fulano da Silva é: 2.0

Informe o nome do aluno: Ciclano Bezerra
Digite a primeira nota do aluno Ciclano Bezerra: 1,1
Digite a segunda nota do aluno Ciclano Bezerra: 2,2
Digite a terceira nota do aluno Ciclano Bezerra: 3,3
A média do aluno Ciclano Bezerra é: 2.1999999999999997

Informe o nome do aluno: Beltrano Menezes
Digite a primeira nota do aluno Beltrano Menezes: 10,0
Digite a segunda nota do aluno Beltrano Menezes: 9
Digite a terceira nota do aluno Beltrano Menezes: 8,6
A média do aluno Beltrano Menezes é: 9.200000000000001

É isso aí.

Até mais!

Ybadoo
http://www.ybadoo.com.br/

FlavioA

caro amigo descobri que o problema é justamente meu ambiente aqui
o algoritmo funciona normal visto que falta algumas coisas, mas eu
agradeço muito sua ajuda. Muito Obrigado e até a próxima.

Criado 26 de fevereiro de 2013
Ultima resposta 26 de fev. de 2013
Respostas 8
Participantes 2