java.lang.NumberFormatException: For input string: "2 + 2"?

7 respostas
programaçãojavaerrorexception
Y

Queria saber o porquê de meu programa dar NumberFormatException, sendo que se eu criar um “int x = 2 + 2 == 4”, então por que “int y = Integer.parseInt(“2 + 2”) == NumberFormatException” ?

public static void main(String[] args) 
{
	int  soma = Integer.parseInt("2") + Integer.parseInt("2") ;
	System.out.println(soma);
	
	int a = 2 + 2 ;
	System.out.println(a);
	
	Integer b = new Integer("2 + 2");
	System.out.println(b);
}

Exception in thread "main"
java.lang.NumberFormatException: For input string: "2 + 2"
    	at java.lang.NumberFormatException.forInputString(Unknown Source)
    	at java.lang.Integer.parseInt(Unknown Source)
    	at java.lang.Integer.<init>(Unknown Source)
    	at exercicios.teste.main(teste.java:12)

7 Respostas

R

Bom dia, é bem simples, o parseInt converte o tipo do valor para um inteiro, CASO seja um inteiro válido. “2 + 2” obviamente não é um inteiro válido, pois possui caracteres como o + e os espaços que não podem ser convertidos. O parseInt apenas transforma um NÚMERO inteiro que está em formato String para o tipo Integer, não faz conversões do tipo remover caracteres diferentes de número menos ainda resolve equações.

L

Exemplificando o que o @Rodrigo_Void explicou, veja:

// Convertendo o número 1 em inteiro
new Integer("1"); // Ok

// Convertendo a letra "a" em inteiro
new Integer("a"); // Erro: java.lang.NumberFormatException: For input string: "a"

// Convertendo o sinal "+" em inteiro
new Integer("+"); // Erro: java.lang.NumberFormatException: For input string: "+"

// Convertendo o texto "2 + 2" em inteiro
new Integer("2 + 2"); // Erro: java.lang.NumberFormatException: For input string: "2 + 2"
Y

Entendi… então existe alguma outra coisa que eu possa fazer para converter uma string “2+2” pra um int 4 ? ou é impossível ?
Obrigado.

R

Não.
Até existem algumas APIs (de terceiros) que resolvem equações em String. NÃO RECOMENDO.
Ou vc pode desenvolver sua api que resolve esse tipo de informação. NÃO É FÁCIL
Isso realmente é necessário pra vc?

Y

Sim… eu precisava de algo que faria isso, mas tudo bem :frowning:

E

Rapaz, você poderia fazer isso fazendo uma busca pelos sinais aritméticos pra saber onde eles estão e assim saber qual operação será feita e depois fazer um split pra pegar os valores.

Y

Muito obrigado, vou tentar fazer aqui, vlw pela ajuda de todos !

Criado 7 de junho de 2017
Ultima resposta 9 de jun. de 2017
Respostas 7
Participantes 4