Problema básico em JAVA

Olá pessoal.
Desculpem a minha ignorância em mas estou com um problema básico
em JAVA e não achei solução ainda.

Meu código é:

package basico;
import java.util.Scanner;
public class fundamento{

public static void main(String[] args){
 
 float numero;
 System.out.println("Digite um numero: ");
 Scanner sc = new Scanner(System.in);
 numero = sc.nextFloat();
 System.out.println(" -> " + numero);

E a saída do programa é:

Exception in thread “main” java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextFloat(Scanner.java:2345)
at basico.fundamento.main(fundamento.java:10)
C:\Users\user\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1
FALHA NA CONSTRUÇÃO (tempo total: 3 segundos)

Por favor, alguém pode dizer onde errei?

Creio que isto resolva.

public class fundamento {
    public static void main(String[] args){
      Scanner sc = new Scanner(System.in);
      float numero;
      System.out.println("Digite um numero: ");
      numero = sc.nextFloat();
      System.out.println(" -> " + numero);
    }
}

Esqueceste de fechar as chaves tanto da classe quanto do metodo. E tente declarar classes como Streams, Buffers, ArrayList e etc tudo antes de inputs.

1 curtida

Uma dica para o futuro, tente entender o que diz as mensagens de erro, no caso do Java, elas são bem claras, veja:

java.util.InputMismatchException

quer dizer que o tipo de dado que o programa espera ler não é o mesmo tipo de dado que foi digitado pelo usuário. No seu caso, como você está esperando um float, é muito comum ocorrer erro de formatação por conta de configuração regional. Se você está digitando número decimal com vírgula, por exemplo, 10,25, tente trocar por 10.25 e vice-versa.

3 curtidas

Obrigado pela ajuda. Coloquei esse código, mas continua dando o mesmo
erro quando coloco um número com ponto .

Obrigado pela dica. Digitei o número com ponto e depois com virgula.
Mas continua dando erro. : /

Segue a solução:

float numero;
System.out.println("Digite um numero: ");
Scanner sc = new Scanner(System.in);
numero = Float.parseFloat(sc.nextLine());
System.out.println(" -> " + numero);

Vejo muita gente aqui no fórum com problemas ao utilizar a classe Scanner. Minha dica pra usar essa abençoada é sempre pegar o valor da linha com o nextLine() (retorna uma String) e converter o valor pro tipo desejado. Quando se usa next(), nextFloat(), etc, o último caractere (\n) da linha dá problema. Isso justifica a exceção java.util.InputMismatchException, pois o esperado era um número 888.8 e veio um 888.8\n.

Se vc usa o nextLine() pra pegar o valor, esse \n é devidamente “tratado”. A solução que sugeri foi pegar o valor como uma string “tratada” e fazer um parse dela pro tipo Float.

3 curtidas

Muito obrigado cara. Isso resolveu o problema.

@JoCoMo tente está variação:

 public class fundamento {
     public static void main(String[] args){
         Scanner sc = new Scanner(System.in);
         float numero;
         System.out.println("Digite um numero: ");
         numero = Float.parse(sc.nextLine());
         System.out.println(" -> " + numero);
     }
 }

Boa noite!

Eu também sou iniciante em Java. Estou começando a praticar fazendo exercícios. Eu fiz dezoito exercícios e estou voltando a fazer novamente os exercícios aplicando a segunda versão, ou seja, de forma diferente da primeira versão.

Olhando o código embaixo. Eu tenho uma dúvida:

1 - Eu estou querendo que o usuário possa digitar a nota com ponto. Exemplo: 8.5. No meu código, ele funciona só com vírgula (8,5). Na saída só aparece o número com ponto. Exemplo: 8.78032

package com.loiane.cursojava.aula13.labs;
import java.text.DecimalFormat;
import java.util.Scanner;
public class Exer04 {
private static Scanner sc;
public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

	System.out.printf("Informe a nota do primeiro bimestre.");
	double bimestral1 = sc.nextDouble();
	DecimalFormat b1 = new DecimalFormat("#.##");
	b1.format(bimestral1);
	
	System.out.printf("Informe a nota do segundo bimestre.");
	double bimestral2 = sc.nextDouble();
	DecimalFormat b2 = new DecimalFormat("#.##");
	b2.format(bimestral2);
	
	System.out.printf("Informe a nota do terceiro bimestre.");
	double bimestral3 = sc.nextDouble();
	DecimalFormat b3 = new DecimalFormat("#.##");
	b3.format(bimestral3);
	
	System.out.printf("Informe a nota do quarto bimestre.");
	double bimestral4 = sc.nextDouble();
	DecimalFormat b4 = new DecimalFormat("#.##.");
	b4.format(bimestral4);
			
	int peso1 = 1;
	int peso2 = 2;
	int peso3 = 3;
	int peso4 = 4;
	
	double bimestral = (bimestral1 * peso1) + (bimestral2 * peso2) + (bimestral3 * peso3) + (bimestral4 * peso4);
	double anual = bimestral / 10; 
	
	System.out.println("A média anual do aluno é: " + anual);
}

}

Tenta usar um campo formatado.

Obrigada @andersonR :slight_smile: Valeu!

Pegue a String da nota com o scanner e use o o método replace antes de converter para float ou double.

Exemplo: (por convenção usa-se “sout” para System.out)

sout.println("Informe a nota do XXXX bimestre: ");
String nota = scanner.nextLine();
nota = nota.replace('.', ',');
float notaFloat = Float.parseFloat(nota);

Na verdade tem que ser trocar a vírgula por ponto.

nota.replace(',', '.')

Muito grato amigo.

dia 13/05/2021 estou aqui para te agradecer MUITO kkkkkk. Fiquei quebrando a cabeça muuuito até achar esse seu comentário. VLWZÃO