[RESOLVIDO] Erro no Scanner

4 respostas Resolvido
N

Tenho o seguinte código

public static void testarEmpregado() {
	Scanner sc = new Scanner(System.in);

	System.out.print("Digite o nome: ");
	String nome = sc.nextLine();

	System.out.println("Digite o endereço: ");
	String endereco = sc.nextLine();

	System.out.println("Digite o número de telefone:");
	String telefone = sc.nextLine();

	System.out.println("Digite o código do setor");
	int codigoSetor = sc.nextInt();
	sc.nextLine();

	System.out.println("Digite o salário base");
	float salarioBase = sc.nextFloat();
	sc.nextLine();

	System.out.println("Digite o valor do imposto");
	float imposto = sc.nextFloat();
	sc.nextLine();

	Empregado emp = new Empregado(nome, endereco, telefone, codigoSetor, salarioBase, imposto);
	float sal = emp.calcularSalario();
	System.out.printf("Salário do empregado: %.2fn", sal);
	sc.close();

}

E quando chega na hora de escanear o nome o java lança a java.util.NoSuchElementException

Como q eu resolvo isso?

4 Respostas

A

Testei seu código e não ocorre nenhum erro. Basta informar os dados no formato esperado.
Poderia explicar melhor o momento que ocorre o erro?
Envie também a StackTrace.

darlan_machado

Posta o código completo, pois o erro que você está se referindo não pode ser lançado pelo Scanner.

A
Solucao aceita

Essa exceção só poderia acontecer se você, em algum outro momento, criou outra instância do Scanner passando como parâmetro System.in e fechou.
Ex:

public static void main(String[] args) {
		   Scanner sc = new Scanner(System.in);

		System.out.print("Digite o nome: ");
		String nome = sc.nextLine();

		System.out.println("Digite o endereço: ");
		String endereco = sc.nextLine();

		System.out.println("Digite o número de telefone:");
		String telefone = sc.nextLine();

		System.out.println("Digite o código do setor");
		int codigoSetor = sc.nextInt();
		sc.nextLine();

		metodo();
		
		System.out.println("Digite o salário base");
		float salarioBase = sc.nextFloat();
		sc.nextLine();

		System.out.println("Digite o valor do imposto");
		float imposto = sc.nextFloat();
		sc.nextLine();

		List<Object> info = List.of(nome, endereco, telefone, codigoSetor, salarioBase, imposto);
		info.forEach(System.out::println);
		System.out.printf("Salário do empregado: %.2f", salarioBase);
		
		sc.close();
	}
	
	private static void metodo() {
		Scanner sc = new Scanner(System.in);
		sc.close();
	}

Quando você chama sc.close() no método metodo(), ele não apenas fecha seu scanner, mas também fecha seu System.in fluxo de entrada.

N

É isso msm obg vou arrumar

Criado 10 de agosto de 2018
Ultima resposta 10 de ago. de 2018
Respostas 4
Participantes 3