Problema com Números quebrados Java Iniciante

Boa Noite,
Estou com problema na hora de fazer a leitura de números quebrados, sejam eles com “,” ou “.”(Ex: 10,4 ou 10.4) simplesmente retorna o erro

Exception in thread “main” java.util.UnknownFormatConversionException: Conversion = ‘2’
at java.base/java.util.Formatter.checkText(Formatter.java:2732)
at java.base/java.util.Formatter.parse(Formatter.java:2708)
at java.base/java.util.Formatter.format(Formatter.java:2655)
at java.base/java.io.PrintStream.format(PrintStream.java:1053)
at java.base/java.io.PrintStream.printf(PrintStream.java:949)
at NovosExerciciosAParte.ExerciciosDoMaterialDeApoioMatematica4.main(ExerciciosDoMaterialDeApoioMatematica4.java:21)

Já usei Locale.setDefault(Locale.US); pra ver se resolvia porém o erro persiste. Alguém saberia me dizer como resolver? Só consigo inserir apenas números inteiros.

Segue cód que apresenta o erro(porém o erro persiste em qualquer código que eu faça):

public class Exec4 {

public void exec4() {
	Locale.setDefault(Locale.US);
	Scanner sc = new Scanner(System.in);

	int numero, horas;
	double valorHora, salario;

	numero = sc.nextInt();
	horas = sc.nextInt();
	valorHora = sc.nextDouble();

	salario = valorHora * horas;

	System.out.println("NUMBER = " + numero);
	System.out.printf("SALARY = U$ %.2f%n", salario);

	sc.close();
```  **Observação: Estou tentando atribuir numero com ponto flutuante apenas para a Variável valorHora que está em double, nas duas primeiras variáveis estou colocando numeros inteiros, Agradeço desde já. **

Boa noite, :coffee:
Então aqui no meu funcionou normalmente, então nesse caso usa dessa forma aqui:

Locale.setDefault(Locale.US);
Scanner sc = new Scanner(System.in);

int numero, horas;
double valorHora, salario;

numero = Integer.valueOf(sc.nextLine());
horas = Integer.valueOf(sc.nextLine());
 //valorHora = Double.valueOf(sc.nextLine().replace(",", ".")); //use esse código se quiser substituir a vírgula pelo ponto e não ficar dando NumberFormatException
valorHora = Double.valueOf(sc.nextLine());

salario = valorHora * horas;

System.out.println("NUMBER = " + numero);
System.out.printf("SALARY = U$ %.2f%n", salario);

sc.close();

1 curtida

Agora funcionou o código!! Só que não sei onde estava o erro e não conheço esse código Integer.valueOf(sc.nextLine()); Devo me preocupar agora? ou vou fazendo as aulas que lá na frente explica? Muito obrigado pela ajuda.

@KevinMagican

Vou tentar explicar da melhor maneira possível:

sc.nextLine(); -> Recebe uma string que é digitada pelo usuário
Integer.valueOf(); -> Esse método recebe uma String entre os (), e ela realiza a conversão da String para um Integer

Nesse caso eu não recomendaria você esperar, talvez eles nem expliquem de forma correta, o melhor a se fazer, é sempre que tiver tempo pesquise na internet sobre programação Java, tem muito vídeo no YouTube ensinando. Eu mesmo estou fazendo por conta própria, pois eu gosto de programar. De qualquer forma, te desejo bons estudos e caso precise, pode postar aqui que nós te dá uma força aí!

1 curtida

Muitos professores ensinam errado.
Quando você usa a classe Scanner para ler entrada pelo teclado, você deveria utilizar somente o método nextLine() pois os outros métodos não consomem a quebra de linha gerada ao pressionar o ENTER.
Outra coisa, se você tem variável int utilize o Integer.parseInt, que já retorna um int.
O Integer.valueOf retorna um Integer.
Tipos primitivos são uma coisa, wrapper classes são outra, não as trate como se fossem iguais, ou estará desperdiçando memória.

2 curtidas

Tenho muito o que aprender ainda, obrigado pela informação, foi muito útil saber disso! @staroski! :+1:

1 curtida

Muito Obrigado pela ajuda de vocês e desculpe a demora para responder, antei meio atarefado com coisas em casa, muito obrigado pelo tempo e ajuda dos dois, muito grato mesmo