Converta uma String para um número sem usar as bibliotecas do java que já fazem isso. Isso é, uma String x = “762” deve gerar um int i = 762.
Para ajudar, saiba que um char pode ser “transformado” em int com o mesmo valor numérico fazendo: char c = ‘3’; int i = c - ‘0’; // i vale 3!
Aqui estamos nos aproveitando do conhecimento da tabela unicode: os números de 0 a 9 estão em sequência! Você poderia usar o método estático Character.getNumericValue(char) em vez disso.
Okay então com esse codigo abaixo eu pego a 1 posição da string como valor numerico:
Character.getNumericValue(c.charAt(0));
Tem algum metodo que eu possa dps de pegar as 3 posições, eu possa concatena-lás para jogar em uma int.
Você consegue pegar o valor numérico do caractere, mas você ainda tem que saber qual é a unidade, a dezena, a centena, etc…
Essas coisas aí você não vai ter como evitar, vai ter que resolver
JoiceFogaca
Oi rodrigo,
Quando vc se explicou pensei no codigo abaixo, tinha ki ser assim msm, não tinha jeito mais facil ?
Eu coloquei uma Exception que não funcinou, não era certa para o que eu queria, como eu faço pra ele rodar só se o atributo s tiver somente numeros?
Se tiver alguma letra ele não tratar.
publicclassTint{Strings;publicTint(Strings){this.s=s;}publicintconvertendo(){try{intr=0;intc=0;for(intx=this.s.length()-1;x>=0;x--){r+=Character.getNumericValue(this.s.charAt(x))*Math.pow(10,c);c++;}returnr;}catch(java.lang.ClassCastExceptione){System.out.println("Tipo de Dado não esperado");return0;}}}}
Rodrigo_Sasaki
Infelizmente, no seu caso, todos os chars tem um valor numérico válido. Então ele buscará o valor de qualquer caractere que você enviar para ele.
O que você pode fazer é verificar se essa String está no formato que você quer, pode encapsular isso em um método, tentando converter ou usando expressões regulares (que dependendo do caso deixa as coisas bem complexas).
Antes de tudo isso você precisa definir o que é um número. Como no seu caso você retorna um int, então podemos deduzir que serão considerados como números, somente números inteiros. Então você pode fazer algo assim:private boolean isNumber(String number){
try{
Integer.parseInt(number);
return true;
catch(NumberFormatException e){
return false;
}
}E com esse método você descobre se a String informada contém um número válido ou não.
ViniGodoy
Veja:
1234 = 1x1000 + 2x100 + 3x10 + 4x0
Ou então:
1234 = 1x10x10x10 + 2x10x10 + 3x10 + 4
Ou ainda:
1234 = ((((((1)x10)+2)x10)+3)x10)+4
Rodrigo_Sasaki
ViniGodoy:
Veja:
1234 = 1x1000 + 2x100 + 3x10 + 4x0
Ou então:
1234 = 1x10x10x10 + 2x10x10 + 3x10 + 4
A chamada que ela faz a Math.pow a cada iteração já não resolve isso?
ViniGodoy
Rodrigo Sasaki:
ViniGodoy:
Veja:
1234 = 1x1000 + 2x100 + 3x10 + 4x0
Ou então:
1234 = 1x10x10x10 + 2x10x10 + 3x10 + 4
A chamada que ela faz a Math.pow a cada iteração já não resolve isso?
Sim, resolve… mas há outras formas mais eficientes de pensar no problema. Basta perceber que cada multiplicação por 10 “afasta” o número para a esquerda.
andersoncscz
public class ConversorDeString {
private String num;
Quando vc se explicou pensei no codigo abaixo, tinha ki ser assim msm, não tinha jeito mais facil ?
Eu coloquei uma Exception que não funcinou, não era certa para o que eu queria, como eu faço pra ele rodar só se o atributo s tiver somente numeros?
Se tiver alguma letra ele não tratar.
publicclassTint{Strings;publicTint(Strings){this.s=s;}publicintconvertendo(){try{intr=0;intc=0;for(intx=this.s.length()-1;x>=0;x--){r+=Character.getNumericValue(this.s.charAt(x))*Math.pow(10,c);c++;}returnr;}catch(java.lang.ClassCastExceptione){System.out.println("Tipo de Dado não esperado");return0;}}}}
Olha vou te falar minha opinião que é a seguinte,
existem jeitos mais simples de fazer algumas coisas desse tipo.
Um tempo atrás eu estava vendo umas coisas igual você está
mostrando aqui também mas depois notei que tem algumas
coisas que são muito complexas e difíceis de usar
e se pesar bem talvez tenha 1% de chance apenas de ter que usar.
Por isso essa é minha opinião.
Mas fica a vontade de cada um querer ou não explorar as coisas.
Para mim o velho Cast ou então o velho estilo Integer.parseInt
Abraço.
drsmachado
JavaDreams:
JoiceFogaça:
Oi rodrigo,
Quando vc se explicou pensei no codigo abaixo, tinha ki ser assim msm, não tinha jeito mais facil ?
Eu coloquei uma Exception que não funcinou, não era certa para o que eu queria, como eu faço pra ele rodar só se o atributo s tiver somente numeros?
Se tiver alguma letra ele não tratar.
publicclassTint{Strings;publicTint(Strings){this.s=s;}publicintconvertendo(){try{intr=0;intc=0;for(intx=this.s.length()-1;x>=0;x--){r+=Character.getNumericValue(this.s.charAt(x))*Math.pow(10,c);c++;}returnr;}catch(java.lang.ClassCastExceptione){System.out.println("Tipo de Dado não esperado");return0;}}}}
Olha vou te falar minha opinião que é a seguinte,
existem jeitos mais simples de fazer algumas coisas desse tipo.
Um tempo atrás eu estava vendo umas coisas igual você está
mostrando aqui também mas depois notei que tem algumas
coisas que são muito complexas e difíceis de usar
e se pesar bem talvez tenha 1% de chance apenas de ter que usar.
Por isso essa é minha opinião.
Mas fica a vontade de cada um querer ou não explorar as coisas.
Para mim o velho Cast ou então o velho estilo Integer.parseInt
Abraço.
Você leu o enunciado do exercício? Ele diz claramente que
sem usar as bibliotecas do java que já fazem isso
Por isso, como você vai fazer para usar o Integer.parseInt se o enunciado é claro em dizer que ele não deve ser utilizado?
Na boa, quer somar respostas, contribua com coisas úteis, responda tópicos que não foram respondidos, ao invés de falar bobagens como esta ou, no mínimo, dê-se ao trabalho de analisar de forma adequada o problema, entenda todo o contexto e então forneça uma resposta que agregue algum valor à discussão.