[RESOLVIDO] Float.parseFloat não funciona no CMD

Estou tentando executar o seguinte código:

import javax.swing.JOptionPane;

public class ExercUm{
public static void main (String[] args){
float salario, salreajustado;
salario = float.parseFloat(JOptionPane.showInputDialog(null, “Informe seu salario”));

	//Calcular reajuste
	if(salario<=980){
		salreajustado = salario + (salario * 0.2);
		JOptionPane.showMessageDialog(null, "Seu salario reajustado é:" + salreajustado);
	}else{
		if(salario<1800){
			salreajustado = salario + (salario * 0.15);
			JOptionPane.showMessageDialog(null, "Seu salario reajustado é:" + salreajustado);
		}else{
			if(salario<2500){
				salreajustado = salario + (salario * 0.1);
				JOptionPane.showMessageDialog(null, "Seu salario reajustado é:" + salreajustado);
			}else{
				JOptionPane.showMessageDialog(null, "Seu salario é:" + salario);
			}
		}
	}
}

}

Erro:

Java é uma linguagem com suporte à orientação a objetos, pois, além das classes, possui tipos primitivos (e outras cositas más de programação estruturada).
Quando você tem um destes, escritos como estão

boolean
byte
short
char
int
float
long
double

Você tem apenas tipos primitivos e, sendo assim, nunca poderá invocar nenhum método a partir deles. Tipos primitivos só representam os valores atribuídos à eles.
Para conseguir fazer o que você quer, você deverá utilizar as classes wrappers

Boolean
Byte
Short
Character
Integer
Float
Long
Double

Todas do pacote java.lang

Sim, uma letra minúscula faz a diferença, troque

float.parseFloat(

por

Float.parseFloat(

1 curtida

Só complementando a resposta do Luis, precisa acrescentar “f” a frente do 0.2, 0.15 e 0.1 para que elas fiquem do tipo float.

1 curtida

@Luis_Augusto_Santos
Não sabia que float é primitivo, e Float é classe wrappers!. Algum lugar onde eu possa saber mais? E nunca mais esquecer essa diferença sabe… kkkkk
Outra coisa, fiz o que você pediu e os erros mudaram:

Fiz outra alteração, de:
float salario, salreajustado;
para:
double salario, salreajustado;

E funcionou!!! Qual o problema em utilizar o float ? Porque acusa o erro da imagem quando utilizo float?

P.S: eu alterei também a parte da leitura de Float para Double.

@lucas99
Não entendi…
Eu tenho que fazer isso:
salreajustado = salario + (salario * Float.parseFloat(0.2));
Só que em tudo?

salario = Float.parseFloat(JOptionPane.showInputDialog(null, "Informe seu salario"));

Esse é a parte do código que o Luis disse para eu arrumar, e agora? haha.

Agradeço.

Cara, dá uma olhada no blog da caelum, apostilas da caelume k19.
Sobre o erro e a solução:
float é um tipo primitivo (na verdade, aquelas 8 palavras reservadas que postei anteriomente, com a primeira em minúsculo, representam valores primitivos).
Ocorre que float é um tipo de dado que “cabe” dentro de um double (sendo bem bobo, o double comporta valores com o dobro do tamanho de um float).
O que ocorre é que todo valor inserido no código ou lido pelo java sempre será interpretado como double, por padrão.
Então:
0.5 10.9 10000.3
todos são double.
Neste caso, você pode ir se acostumando a uma solução bem rápida, que consiste em inserir uma letra após o valor numérico, fazendo uma transformação imediata:
0.5F 10.9f 10000.3F
Agora estes mesmos valores são interpretados como float.

1 curtida

@Luis_Augusto_Santos

Meu Deus! Obrigadoo. Essa de todos os valores lidos ou inseridos serem double é nova para mim.
Amo a apostila caelum, até uma pessoa como eu consegue entender ela kkkkkk.
A k19 é nova para mim, vou dar uma olhada.

Agradeço muitissimo!

Deixa eu esclarecer isso. Todos os valores com ponto flutuante.
123 //inteiro 10.9 //double 124343545454566L //long 10.9F //float

Entendi. Valeu, vai me ajudar muito.
Porque não usar sempre double? Porque o float? kkkk

Sei que tem relação ao espaço, mas já que o java tem esse “problema” em pensar que “tudo” é double, para qualquer valor que pudesse ser real como o salário, deveria ser usado double.
Mas obrigado! Agora posso usar os dois :smiley:

Olha, por experiência, sugiro utilizar BigDecimal. Mais preciso e melhor que os dois tipos anteriores para a execução de operações com ponto flutuante.

O código correto:

import javax.swing.JOptionPane;

public class ExercUm{
public static void main (String[] args){

  float salario, salreajustado;
  salario = Float.parseFloat(JOptionPane.showInputDialog(null, "Informe seu salario"));
  //Calcular reajuste
  if(salario<=980){
  	salreajustado = salario + (salario * 0.2f);
  	JOptionPane.showMessageDialog(null, "Seu salario reajustado é:" + salreajustado);
  }else{
  	if(salario<1800){
  		salreajustado = salario + (salario * 0.15f);
  		JOptionPane.showMessageDialog(null, "Seu salario reajustado é:" + salreajustado);
  	}else{
  		if(salario<2500){
  			salreajustado = salario + (salario * 0.1f);
  			JOptionPane.showMessageDialog(null, "Seu salario reajustado é:" + salreajustado);
  		}else{
  			JOptionPane.showMessageDialog(null, "Seu salario é:" + salario);
  		}
  	}	
  }

}
}

1 curtida