Converter String para Int

25 respostas
alansystem

o que há de errado na minha estrutura? ou tudo? lembrando que estou fazendo testes, me baseando em C

public class Teste {

public static void main(String[] args) {

	int a=11;
	Integer.parseInt(a);
	int c=a+a;
	System.out.println(c);
	
	
}

}

25 Respostas

L

Qual é o erro que dá?

Frantic_Avenger

No teu caso a variável ‘a’ já é um inteiro você tá transformando um inteiro em um inteiro… E o parâmetro passado para Integer.parseInt(a); precisa ser uma String e não um inteiro.

Substitua por:

public class Teste { public static void main(String[] args) { int a = Integer.parseInt("11"); int c = a+a; System.out.println(c); } }

ou

public class Teste { public static void main(String[] args) { String b = "11"; int a = Integer.parseInt(b); int c = a+a; System.out.println(c); } }

ou

public class Teste { public static void main(String[] args) { String a = "11"; int c = Integer.parseInt(a) + Integer.parseInt(a); System.out.println(c); } }

LucasAdri07

alansystem:
o que há de errado na minha estrutura? ou tudo? lembrando que estou fazendo testes, me baseando em C

public class Teste {

public static void main(String[] args) {

	int a=11;
	Integer.parseInt(a);
	int c=a+a;
	System.out.println(c);
	
	
}

}

Você não tem uma String, a variavel “a” ja é um Int

[EDIT] Você pode fazer um dos exemplos que nosso amigo Frantic Avenger usou, nele você possui uma String que precisa ser convertida para um Int.

Se for um Double (um número quebrado, exemplo 15,3) você poderia usar:

public class Teste { public static void main(String[] args) { double a = Double.parseDouble("11"); double c = a+a; System.out.println(c); } }

alansystem

Vlw era isso mesmo! esse negócio de converter me dá um nó na cabeça, tão acostumado com PHP que não converte!

afinal o porque JAVA tem esse negócio de conversão já que é uma linguagem tão nova comparada com C?

ViniGodoy

Por que Java é fortemente tipado.

Essa característica está mais relacionado a uma decisão de projeto, não tanto ao “poder” da linguagem. Há vantagens de desvantagens de optar por ser fortemente ou fracamente tipado, e uma não representa uma evolução da outra.

Mais informações:

LucasAdri07

De uma olhada aqui.

E no link que o ViniGodoy passou também…

alansystem

sim, entendo perfeitamente o fato de ter algumas diferenças sim, o que eu não entendo é porque a complicação de converter! ao invés de facilitar no processo!

Frantic_Avenger

Bom por vias das dúvidas estude Ruby:

fonte: http://celodemelo.wordpress.com/2008/02/28/linguagem-fortemente-tipada-strong-typing/

alansystem

Perfeito!

Fiz uma estrutura que deveria receber um valor inteiro, se eu colocar o meu nome por exemplo vai gerar um erro!

neste caso trabalho com try catch?

import javax.swing.JOptionPane;

public class Teste {

public static void main(String[] args) {   
    String a = JOptionPane.showInputDialog("Digite um número ");
    int c = Integer.parseInt(a);
    int b=c+c;
    System.out.println(b);
}

}

ViniGodoy

Por que quando você “facilita o processo” você pode fazer com que o programador tenha erros inesperados. Por exemplo, pode-se perder precisão ao converter de um double para um int. O programador pode ter atribuido uma String a um int por um infeliz acidente, ao invés de querer ter feito isso de propósito.

O grande objetivo de tipagem forte é garantir segurança nas operações, o que é uma característica bastante desejável em linguagens que precisem ser usadas em ambientes científicos ou mais críticos.

Esse artigo sobre o assunto também é muito bom: http://www.bitabit.eng.br/2009/11/09/a-natureza-de-uma-linguagem-de-programacao/

ViniGodoy
alansystem:
Perfeito!

Fiz uma estrutura que deveria receber um valor inteiro, se eu colocar o meu nome por exemplo vai gerar um erro!

neste caso trabalho com try catch?

Allan, quando for postar códigos, use a tag code:
[code]
Seu código aqui
[/code]

Sim, para testar se a conversão foi ou não bem sucedida, use try catch:

public class Teste {
    public static void main(String[] args) {
        String a = JOptionPane.showInputDialog("Digite um número ");
        try {
            int c = Integer.parseInt(a);
            int b=c+c;
            System.out.println(b);
        } catch (NumberFormatException e) {
            System.out.println("Não foi possível realizar a operação pois o valor informado não era um número inteiro.");
        }
    }
}
Java_Lover
Lucas Emanuel:
Qual é o erro que dá?
java.lang.Error: Unresolved compilation problem: The method parseInt(String) in the type Integer is not applicable for the arguments (int)
alansystem:
o que há de errado na minha estrutura? ou tudo? lembrando que estou fazendo testes, me baseando em C
public class Teste {

     public static void main(String[] args) {

          int a=11;
          Integer.parseInt(a);
          int c=a+a;
          System.out.println(c);
     }
}
O único erro está em Integer.parseInt(a) que além de aceitar somente Strings não está sendo atribuído a nenhuma variável.
LucasAdri07

alansystem:
Perfeito!

Fiz uma estrutura que deveria receber um valor inteiro, se eu colocar o meu nome por exemplo vai gerar um erro!

neste caso trabalho com try catch?

import javax.swing.JOptionPane;

public class Teste {

public static void main(String[] args) {   
    String a = JOptionPane.showInputDialog("Digite um número ");
    int c = Integer.parseInt(a);
    int b=c+c;
    System.out.println(b);
}

}

Sim, useo o try catch, para exibir uma mensagem, por exemplo “Caracter Invalido”

alansystem

Perfeito ViniGodoy

try -> se o bloco abaixo não receber o valor
catch -> então exiba o erro

é isso né a leitura?

outra coisa percebi que você colocou o try depois do JOptionPane, tanto faz, ou é boa prática? pq fiz o teste e também funciona

vlw a ajuda galera!

LucasAdri07

Viny, eu usei o Try antes do JOptionPane, então o JOptionPanew, está dentro do bloco do try, ficou assim:

while (true) {

            try {
                String op = JOptionPane.showInputDialog(null, "Digite um número INTEIRO : ", "Exercicio 10 da Lista III",
                        JOptionPane.WARNING_MESSAGE);
                if (op == null) {
                    break;

Tem algum problema?

ViniGodoy

alansystem:
Perfeito ViniGodoy

try -> se o bloco abaixo não receber o valor
catch -> então exiba o erro

é isso né a leitura?

outra coisa percebi que você colocou o try depois do JOptionPane, tanto faz, ou é boa prática? pq fiz o teste e também funciona

vlw a ajuda galera!

O try pede para ele “tentar” fazer alguma operação perigosa. Se ela falhar, o erro é capturado no catch. Esse link é um ótimo material sobre o assunto:

Coloquei o try abaixo do JOptionPane pq o showInputDialog nunca dará erro. A nossa primeira operação de risco é o parseInt. Até poderia ser dentro, sem problemas, mas eu geralmente prefiro fazer assim, pois estou dizendo explicitamente onde está o meu código crítico.

O resto do código fica dentro do try pois não queremos executar nenhum daquelas comandos caso o parseInt falhe.

alansystem

Então o erro só aparece porque o bloco do try executou?

o try serve para se o bloco falhar não executar? ou falei baboseira?

c354r

Entre o bloco [size=18]try [/size] você coloca onde está perigoso, onde pode ocorrer o erro, entre o [size=18]catch[/size] a mensagem.
Pelo que eu entendi… :roll:

c354r

Ou eu falei besteira? :roll:

LucasAdri07

ViniGodoy:
alansystem:
Perfeito ViniGodoy

try -> se o bloco abaixo não receber o valor
catch -> então exiba o erro

é isso né a leitura?

outra coisa percebi que você colocou o try depois do JOptionPane, tanto faz, ou é boa prática? pq fiz o teste e também funciona

vlw a ajuda galera!

O try pede para ele “tentar” fazer alguma operação perigosa. Se ela falhar, o erro é capturado no catch. Esse link é um ótimo material sobre o assunto:

Coloquei o try abaixo do JOptionPane pq o showInputDialog nunca dará erro. A nossa primeira operação de risco é o parseInt. Até poderia ser dentro, sem problemas, mas eu geralmente prefiro fazer assim, pois estou dizendo explicitamente onde está o meu código crítico.

O resto do código fica dentro do try pois não queremos executar nenhum daquelas comandos caso o parseInt falhe.

Viny, não sei se estou certo mas, se por exemplo, eu defino quantos caracteres podem ser digitados dentro do showInputDialog, tem como ocorrer um erro? ou o showInput “travara” o ultimo caracter, caso o próximo ultrapasse o limite definido…

alansystem

como é colocado este limite? dentro do JOptionPane.showInputDialog ?

ViniGodoy

Não tem como estipular esse limite. Teria como fazer usando um JDialog, mas não no JInputDialog.showInputDialog.

No catch você não põe necessariamente a mensagem de erro, mas sim, o tratamento do erro. Algumas vezes, o tratamento pode ser só gerar um log, ou então, pode ser simplesmente não fazer nada. Mostrar uma mensagem é um exemplo de tratamento de erro, mas não o único tipo possível. O importante é analisar caso a caso.

Muitas vezes, é necessário fazer outras coisas como fechar conexões, statements etc… Leiam o material do sergio que é bem completo sobre quando, como e porque lançamos exceções e como devemos trata-las.

Além do try e do catch existe o bloco finally, que sempre será executado, tenha exception ou não.

LucasAdri07

É, acabei falando bobagem, não tem como limitar esse numero de caracteres dentro do JOptionPane…

alansystem

Excelente!

Catch como Else porém para tratamento de erros!

entendi perfeitamente, vlw as dicas valiosas!

c354r

Ah sim agora entendi, vlw! :smiley:

Criado 26 de maio de 2010
Ultima resposta 26 de mai. de 2010
Respostas 25
Participantes 7