Erro ao rodar um algoritmo com estrutura condicional em Java

Criei duas variaveis para armazenar duas notas do tipo float e uma variavel para armazenar a media tambem do tipo float. importei o java. util. Scanner para o usuário digitar os dados de saida. O problema é que após digitar a primeira nota o sistema apresentou o seguinte erro…

8.5
Exception in thread “main” java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:939)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextFloat(Scanner.java:2496)
at exercicios.EstruturasCondicionaisSimples.main(EstruturasCondicionaisSimples.java:9)

Segue o código.

package exercicios;

import java.util.Scanner;

public class EstruturasCondicionaisSimples {
	public static void main(String[] args) {
		
		Scanner teclado = new Scanner(System.in);
		float n1=teclado.nextFloat();
		float n2=teclado.nextFloat();
		float m = (n1+n2)/ 2;
		System.out.println("A média é: " + m);
		if(m>8) {
			System.out.println("Meus parabéns pela média!!");
		}
		
		teclado.close();
	}

}

Alguem poderia me ajudar?

Entre com o valor usando vírgula como separador decimal.
A classe Scanner depende do locale da máquina em que a JVM está executando.

3 curtidas

Como está digitando os valores ao rodar o programa?

Esse erro é relacionado à forma como o java espera que o número seja digitado. No caso de floats, experimente usar vírgula em vez de ponto como separador decimal, e veja se funciona.

Extra: como o pessoal recomenda sempre por aqui, prefira usar nextLine e fazer a conversão para float no seu código, em vez de nextFloat/nextInt.

Abraço.

2 curtidas

Complementando o @TerraSkilll , se usar nextLine() a entrada deve ser com ponto, pois a conversão através de Float.parseFloat( String valor ) esperará um ponto como separador decimal. Se mesmo assim quiser continuar a usar o nextFloat() e forçar a entrada com ponto, use o método useLocale( Locale locale ) de Scanner para mudar o locale que será usado, algo como teclado.useLocale(Locale.ENGLISH);

2 curtidas

@davidbuzatto muito obrigado pela orientação, funcionou perfeitamente.

1 curtida

@TerraSkilll obrigado pela orientação!!