Converter de String para Int sem usar a biblioteca java

Pessoal
como converter de String para Int sem usar a biblioteca java. Alguma dica? A apostila da caelum pede isso!
será que tem q usar tabela unicode?
e como implementar?

int num = Integer.parseInt(“1”);

o Vingdel programando essa hora tb hehehe?!!
esse metodo eu sei mas a apostila pede pra nao usar metodo.
fazer no braço
alguma dica?

Você disse que não poderia usar métodos da classe String e não usei… Usei método da class Integer.

Abraço!

até fui reler o enunciado da apostila e vi
me expressei mal Vingdel.
Na realidade pede pra não usar nehuma biblioteca do java.
mas mesmo assim obrigado pela resposta :slight_smile:

Tem que indexar a String pra pegar os dígitos individualmente, subtrair ‘0’ para pegar o valor numérico e multiplicar por 10 dependendo da posição. Em pseudocodigo deve ficar mais ou menos assim:

string c = “12345”;
int d;
int total;
int i = 0;

para cada caractere individual da string faça
d = c[i] - ‘0’;
total = (total * 10) + d;
i = i + 1;
fim-para;

A variável total sai desse código com o valor em inteiro da string.

Se eu não me engano o livro do Dennis Ritchie “C, a linguagem de programação” tem esse exemplo. Só não sei como indexar caracteres de uma string em java sem usar algum método de classe.

Abraços

Marcio

Olá,

Tente criar seu próprio método olhando como a função em C “atoi” faz isso:

http://www.student.cs.uwaterloo.ca/~cs350/common/os161-src-html/atoi_8c-source.html

Até.

Obrigado ai ao Marcoy e ao Paulada
Galera qdo o PC tem falhas entra em modo de segurança e o nub aqui no java qdo trava entra em modo Dinossauro e ai já viu, milhões de anos até recuperar a vel normal de processamento do brain hehhe.
Por isso ainda não tentei analizar o post de vcs.
Ainda to na minha própria tentativa.
A apostila da caelum diz que um char poder virar int ao natural.
Ora, pensei então, um digito String é aceito por uma variavel char então basta eu pegar a String e colocar num array de char e atribuir cada posição desse array de char a cada posição respectiva de um array de inteiros e pra terminar fazer uma variavel do tipo inteiro receber o valor desse array de inteiros.
O problema tá sendo que só consigo pegar uma posição do array de inteiros pra armazenar na var tipo inteiro.
Se eu pudesse pegar o valor completo do array de inteiros pra amramazenar na var inteiro tava resolvido
alguem pode me dar uma luz ai?
depois vou analizar o que foi proposto nos posts acima!

lembrando que nao pode usar a biblioteca java
eu próprio acho que infliji essa regra do exercicio pois usei charAt() e length()

ta aqui meu codigo

int[] arrayInteiros = new int[3];
		char[] arrayChar = new char[3];
		int inteiro = arrayInteiros[3];
		
		String c = "999";
		for (int i=0; i<3; i++){
			arrayChar[i] = c.charAt(i);
			arrayInteiros[i] = arrayChar[i];
		}
		System.out.println(inteiro);

[quote=rafaelczy]ta aqui meu codigo

[code]
int[] arrayInteiros = new int[3];
char[] arrayChar = new char[3];
int inteiro = arrayInteiros[3];

	String c = "999";
	for (int i=0; i<3; i++){
		arrayChar[i] = c.charAt(i);
		arrayInteiros[i] = arrayChar[i];
	}
	System.out.println(inteiro);

[/code][/quote]

Boa tarde, rafaelczy!

Seu código não faz sentido.
Você ao menos tentou faze-lo rodar?

Faça um teste.

eu estou tentando arrumar ele, realmente tem coisa errada.
eu nao sei como pegar o valor total do array com todas posições concatenadas
eu tinha que conseguir fazer :
inteiro = todo array concatenado;
e nao como fiz:
inteiro = arrayInteiros[3];
ufss

Faz assim:

array[0] = 2; // 2*10^3 - repare que o expoente é o maior indice array[1] = 3; // 3*10^2 - repare que o expoente é o maior indice-1 array[2] = 4; // 4*10^1 - repare que o expoente é o maior indice-2 array[3] = 5; // 5*10^0 - repare que o expoente é o maior indice-3Além disso você deve soma-los ao final.

2000 + 300 + 20 + 5 = 2345

A ideia eu já te dei e os recursos para isso você já viu, basta você desenvolver a lógica.

Abraço!

creio q entendi Vingdel
vou tentar implementar
eu pensava q eu era bom de logica mas to vendo que nao
eu nunca iria sacar essa sua logica ai, parabens mesmo!
até gostaria de te perguntar, tu raciocinou isso agora ou ja tinha visto isso antes postado por outros?
valeu!

pessoal acho q to qse
ajuda ae!!!

String s = "2345";
		char[] arrayChar = new char[4];
		int[] arrayInt = new int[4];
		int inteiro;
		int expoente = 3;
		int soma = 0;
		
		for (int i=0; i<=arrayChar.length-1; i++){
			arrayChar[i] = s.charAt(i); // aqui tinha q passar 2, 3, 4, 5 respectivamente e passou 50, 51, 52, 53 (posição na tab unicode)
			arrayInt[i] = arrayChar[i];
			inteiro = arrayInt[i]*10^expoente; // aqui deveria ser equivalente a 10 elevado na 3 (no primeir loop)
			expoente-- ;                         // mas creio que a minha implentação nao esta dizendo isso
			soma += inteiro;
			System.out.println(inteiro);
		}
		System.out.println("O inteiro e: " + soma);

alguem no plantao ajuda ai ?

Ainda tá meio confuso, dá pra simplificar mais. Não precisa de tantos vetores (arrays). Aliás não precisa de nenhum.

Declare apenas as seguintes variáveis

String s = "12345"; //String a ser convertida para inteiro
int d; //dígito que resulta da subtração do caractere indexado pelo '0' do unicode. Ex: '2' - '0' = 2
int i; //contador/indexador da string
int total; // acumulador do valor total, vai somando (total * 10) + d

Eu testei aqui aquele pseudo-codigo que fiz no post anterior e funcionou. Queima a muringa mais um pouco aí que você vai chegar lá.

Abraços

ai Macoy
o brain pifou aqui… nao guento mais… vo nanar
mas cara eu vi teu pseudo codigo e o cod que postei foi o jeito q arrumei pra codificar o teu pseudo codigo (claro dentro do meu limitado ponto de vista)
nao to sabendo fazer sem usar array
ufsss
mas amnha tento mais
valeu!

ah… tem alguma ideia pra mim pegar um char componente da string de cada vez sem usar o charAt() ?

[quote=rafaelczy]creio q entendi Vingdel
vou tentar implementar
eu pensava q eu era bom de logica mas to vendo que nao
eu nunca iria sacar essa sua logica ai, parabens mesmo!
até gostaria de te perguntar, tu raciocinou isso agora ou ja tinha visto isso antes postado por outros?
valeu![/quote]

rafaelczy, pensei na hora que li a sua dificuldade.
A questão era pensar em posicionar os números em seu devidos lugares sem que um interferisse no outro.

Quanto ao seu código, para fazer potenciação existem um método chamado pow() da classe Math.

Procure sobre ele na documentação java. Cara, sempre que você quiser saber sobre alguma classe java, recorra ao google. Por exemplo, se você quer saber sobre a classe Math, busque por “Math java se6” vai ser o primeiro link para você. Já vi que você gosta de falar inglês. Creio que você não vá ter dificuldade de entender.

Quanto a variável expoente, inicialize ela com o valor do comprimento da string-1.

Cara, quero fazer você pensar, por isso não te dou a resposta. Entende, ne?

Abraço!

botei um carvao pra nao dormir de barriga vazia
legal galera so passei pra desejar boa programaçãp pra quem fica
nao aguento ler mais nada mas amnha recomeço a queimação de neuronios
valeu ai Vingdel

[quote=Macoy_AbZ]Ainda tá meio confuso, dá pra simplificar mais. Não precisa de tantos vetores (arrays). Aliás não precisa de nenhum.

Declare apenas as seguintes variáveis

String s = "12345"; //String a ser convertida para inteiro
int d; //dígito que resulta da subtração do caractere indexado pelo '0' do unicode. Ex: '2' - '0' = 2
int i; //contador/indexador da string
int total; // acumulador do valor total, vai somando (total * 10) + d

Eu testei aqui aquele pseudo-codigo que fiz no post anterior e funcionou. Queima a muringa mais um pouco aí que você vai chegar lá.

Abraços[/quote]

Macoy_AbZ, boa noite!

Este teste que você fez foi no java?
Pelo que eu entendi, seu raciocínio não funciona em java.

Aguardo resposta.

EDIT: Opa, agora que prestei atenção, não tinha notado o 0 (zero) entre aspas simples caracterizando char…

Aí sim é correto…

Abraço!

Fala rafaelczy!

Tente pensar “iterativamente” na solução. A cada iteração você tem um caracter unicode que deve ser tranformado em um dígito numérico (inteiro). Você também pode levar a posição do caractere dentro da String (centenas, dezenas, unidades) para saber o múltiplo correto de 10 a ser utilizado.

Passo 1:

Você tem uma String
“24760”

Passo 2:

Você “quebra” a string em caracteres individuais (Aqui ainda não há numeros, apenas caracteres representando-os)
‘2’, ‘4’, ‘7’, ‘6’, ‘0’

Passo 3:

Você pega a distância do caractere unicode do zero ‘0’ (Exemplo: ‘1’ - ‘0’ = 1) e consegue obter os valores individuais dos dígitos (em valores inteiros)
2, 4, 7, 6, 0

Passo 4:

Agora vem a parte chata, multiplicar os valores acima pela potencia adequada de 10 como o Vingdel falou. Existem outras maneiras de fazer isso mas uma delas é:

2 * 10^4
4 * 10^3
7 * 10^2
6 * 10^1
0 * 10^0

A outra maneira de resolver essa parte é ir multiplicando o resultado da iteração anterior por 10. Depois posta o teu programa aqui pra gente ver.

Vingdel, te mandei uma MP depois dá uma olhada.

Abraços

Marcio