Converter de String para Int sem usar a biblioteca java

bah acordei de brain novo e vamos pra pauleira de novo
que bostinha dificil essa… mas é a vida…
Marcoy
realmente to boiando ainda no passo 3 descrito por vc! (os outros eu entendi até já consegui implementar)
será q da pra clarear mais o passo 3
valeu

ta ai meu cod
só cosegui evoluir a incialização da var expoente e mais nada
ufss…

String s = "2345";
		char[] arrayChar = new char[4];
		int[] arrayInt = new int[4];
		int inteiro;
		int expoente = arrayInt.length -1;
		int soma = 0;
		
		for (int i=0; i<=arrayChar.length-1; i++){
			arrayChar[i] = s.charAt(i);
			arrayInt[i] = arrayChar[i];
			inteiro = arrayInt[i]*10^expoente;
			expoente-- ;
			soma += inteiro;
			System.out.println(inteiro);
		}
		System.out.println("O inteiro e: " + soma);

Tá quente agora!

Na linha 10, mude de:

 arrayInt[i] = arrayChar[i];

para:

 arrayInt[i] = arrayChar[i] - '0';

O que você está fazendo é movendo a representação numérica do char (exemplo ‘9’ em ascii é 57) e subtraindo a representação numérica do char ‘0’ (48 em ascii). o que dá: 57 - 48 = 9 que é exatamente o valor que queremos. Lembrando que o java usa o UNICODE e não a Tabela ASCII. Mas isso não interfere no resultado do cálculo.

Acho que o seu programa deve funcionar agora. Mas repense a utilização de tantos arrays… Não é necessário nenhum array.

Abraços

Marcio

“O que você está fazendo é movendo a representação numérica do char (exemplo ‘9’ em ascii é 57) e subtraindo a representação numérica do char ‘0’ (48 em ascii). o que dá: 57 - 48 = 9 que é exatamente o valor que queremos”
incrivel, juro, tive de ler isso umas 20 vezez pra cair a ficha, entender a logica do teu exemplo.
eu sabia que meu arrayInt[i] tava recebendo nao o 9 da string mas 57 q é o posição dele na tab unicode, ou referencia, ou sei la o que na unicode. enfim, o que eu jamais iria imaginar era que tem que subtrair o char 0 que na unicode é 48. dai claro, 57 - 48 = 9
eu ficava focado em arrumar um jeito de parar de receber o valor unicode 57 e conseguir receber 9 em inteiro e tu aceitou trabalhar com o que estava recebendo e foi muito flexivel ao adiconar mais um char ainda na operação ( ‘0’ ) pra subtrair do valor unicode do primeiro char e passar esse resto que vira inteiro no arrayInt[i].
notavel
-recebo nao o 9 mas um char que na tab unico vale 57 . certo. será que há entao na unicode algum valor que eu subtraipoosto de 57 e da o resto 9 do tipo char ainda que seja dai meu arrayInt[i] vai guardar o int 9 direitinho-
nunca eu iria pensar assim eu acho.
o que eu quero dizer é que sinto que ainda nao posso ser deixado sozinho pra resolver só com dicas e pistas fornecidas pelo pessoal do forum, ainda que a intenção deles seja das mais nobres em nao dar resposta pra ajudar o beginer como eu a pensar.
Sinto que no inicio pra caras como eu, “entregar” a resposta como tu fez me ajuda a entender que existe um caminho assim.
as vezes simplesmente nao adiante queimar o brain pq nao vai, o carar falta em base essencial.
melho é o cara pegar algumas respostas vai se acostumando mais e depois com apenas pistas e dicas, ai sim, conseguem descobrir tudo.

bom Marcoy captei finalmente, valeu
ainda nao ta funfando
me creio a que parte delicada resolvi e aprendi
agora vou tentar arrumar
e depois fazer o que me parece impossivel: nao usar arrays…
ufssss…
bela sexta feira
rsss

String s = "2345";
		char[] arrayChar = new char[4];
		int[] arrayInt = new int[4];
		int inteiro;
		int expoente = arrayInt.length -1;
		int soma = 0;
		
		for (int i=0; i<=arrayChar.length-1; i++){
			arrayChar[i] = s.charAt(i);
			arrayInt[i] = arrayChar[i] - '0';
			inteiro = arrayInt[i]*10^expoente;
			expoente-- ;
			soma += inteiro;
			System.out.println(inteiro);
		}
		System.out.println("O inteiro e: " + soma);

procurei legal e vi varios posts de autores diferentes e uma coisa em comum que me fazia nao compreender todos exemplos de codigos era que tinha que subtrair o ‘0’
inclusive pulei tb do teu exemplo de cod por causa disso.
rsssss

int expoente = arrayInt.length-1;     // aqui começa com 3
inteiro = arrayInt[i]*10^expoente;  // aqui eu queria implemntar 10 elevado na 3 mas minha instrução nao diz isso. 

tenho que implementar diferente a potenciação mas nao to sabendo no java como elevar 10 na potencia de uma var que vale 3 (10 elevado na 3a potencia)

Faz tipo um método de potencia…

public static int potencia(int base, int expoente) { if (expoente == 0) return 1; while (expoente-- > 1) base*=base; return base; }
Aí se quiser pegar 10 elevado a 3 é só chamar:

resultado = Classe.potencia(10, 3);
Cara, tenta obter uma cópia da primeira edição traduzida do livro “C a linguagem de programação”. É um livro fininho, pra ler em uma semana. Mas é uma obra prima em termos de algoritmos. Você sai diferente depois da leitura desse livro porque certas coisas ficam muito mais claras. Tambem tenta dar uma reforçada no aspecto de álgebra e aritmética. E tire os arrays do seu programa. Eles não são necessários.

Abraços

Marcio

Cara, tudo bem que exercita criar um método para potenciação, mas já existe um como eu já citei no tópico.

É o Math.pow(). Mas eu acho mais interessante multiplicar por a cada iteração.

Fiz o método aqui e ficou com 8 linhas, bem simples.

Ai Marcoy valeu a as dicas, vou tentar obter o livro e rever algebra e aritmetica.
Vindgdel posta teu codigo de 8 linhas ai.
abaixo o meu finalmente rodando

o main

String s = "2345";
		char[] arrayChar = new char[4];
		int[] arrayInt = new int[4];
		int inteiro;
		int expoente = arrayInt.length-2;
		int soma = 0;
		
		for (int i=0; i<=arrayChar.length-1; i++){
			arrayChar[i] = s.charAt(i);
			arrayInt[i] = arrayChar[i] - '0';
			inteiro = arrayInt[i]*Potenciacao.calculaPotenciacao(expoente);
			expoente--;
			soma += inteiro;
			System.out.println(inteiro);
		}
		System.out.println("O inteiro e: " + soma);

a classe que clacula a potenciação:

public abstract class Potenciacao {
	
	public static int calculaPotenciacao (int num){
		int potenciado = 1;
		for (int i=0; i<=num; i++){
			potenciado = potenciado * 10 ;
		}
		return potenciado;
	}
}

Quem puder ajudar a fazer sem arrays eu agradeço - passando so a teoria ja me serve
abração

[quote=Macoy_AbZ]Faz tipo um método de potencia…

Cara, tenta obter uma cópia da primeira edição traduzida do livro “C a linguagem de programação”. É um livro fininho, pra ler em uma semana. Mas é uma obra prima em termos de algoritmos. Você sai diferente depois da leitura desse livro porque certas coisas ficam muito mais claras. Tambem tenta dar uma reforçada no aspecto de álgebra e aritmética. E tire os arrays do seu programa. Eles não são necessários.

Abraços

Marcio[/quote]

Os autores são Brian W. Kernighan; Dennis M. Ritchie ? Lançado em 1989
304 paginas ! pra ler numa semana?
caramba nem meu aspirador de pó chupa esse livro em 1 semana…rsss
mas gostei
vou comprar
http://www.extra.com.br/livros/informaticaecertificacao/LinguagemeProgramacao/C-A-Linguagem-de-Programacao-Padrao-ANSI-118084.html?utm_source=buscape&utm_medium=comparadorpreco&utm_campaign=Livros_Linguagem-de-Programacao&cm_mmc=buscape_XML--LIVR--Comparador-_-83657

é esse o livro a que te referes mesmo?

Três versões do mesmo método.
A primeira não faz nenhuma verificação.
A segunda já trata números negativos, entretanto ainda não verifica se o número é válido.
Por fim, a terceira, verifica se a String que está sendo analizada representa de fato um número e caso não seja, lança uma NumberFormatException.
Não comentei os códigos. Faça um teste de mesa para entender o que está acontecendo.

[code]public static int toInt( String n ) {

int valor = 0;
int multiplicador = 1;
char[] c = n.toCharArray();

for ( int i = c.length - 1; i >= 0; i-- ) {
    valor += ( ( int ) c[i] - 48 ) * multiplicador;
    multiplicador *= 10;
}

return valor;

}

public static int toInt( String n ) {

int valor = 0;
int multiplicador = 1;
int ate = 0;
char[] c = n.toCharArray();

if ( c[0] == '-' ) {
    ate = 1;
}

for ( int i = c.length - 1; i >= ate; i-- ) {
    valor += ( ( int ) c[i] - 48 ) * multiplicador;
    multiplicador *= 10;
}

// se ate for igual a 1, quer dizer
// que o número é negativo
if ( ate == 1 ) {
    return -valor;
} else {
    return valor;
}

}

public static int toInt( String n ) throws NumberFormatException {

int valor = 0;
int multiplicador = 1;
int ate = 0;
char[] c = n.toCharArray();

if ( c[0] == '-' ) {
    ate = 1;
} else if ( c[0] < '0' || c[0] > '9' ) {
    throw new NumberFormatException( n + " não é um inteiro!" );
}

for ( int i = c.length - 1; i >= ate; i-- ) {

    if ( c[i] < '0' || c[i] > '9' ) {
        throw new NumberFormatException( n + " não é um inteiro!" );
    }

    valor +=  ( ( int ) c[i] - 48 ) * multiplicador;
    multiplicador *= 10;

}

if ( ate == 1 ) {
    return -valor;
} else {
    return valor;
}

}[/code]

[]'s

[quote=rafaelczy][quote=Macoy_AbZ]Faz tipo um método de potencia…

Cara, tenta obter uma cópia da primeira edição traduzida do livro “C a linguagem de programação”. É um livro fininho, pra ler em uma semana. Mas é uma obra prima em termos de algoritmos. Você sai diferente depois da leitura desse livro porque certas coisas ficam muito mais claras. Tambem tenta dar uma reforçada no aspecto de álgebra e aritmética. E tire os arrays do seu programa. Eles não são necessários.

Abraços

Marcio[/quote]

Os autores são Brian W. Kernighan; Dennis M. Ritchie ? Lançado em 1989
304 paginas ! pra ler numa semana?
caramba nem meu aspirador de pó chupa esse livro em 1 semana…rsss
mas gostei
vou comprar
http://www.extra.com.br/livros/informaticaecertificacao/LinguagemeProgramacao/C-A-Linguagem-de-Programacao-Padrao-ANSI-118084.html?utm_source=buscape&utm_medium=comparadorpreco&utm_campaign=Livros_Linguagem-de-Programacao&cm_mmc=buscape_XML--LIVR--Comparador-_-83657

é esse o livro a que te referes mesmo?[/quote]

Não, procure a primeira edição que a tradução é bem melhor. Além disso você acha em sebos bem mais barato.

Aqui ele: http://www.submarino.com.br/produto/1/10410/c:+a+linguagem+de+programacao

Abraços

Marcio

Olá, pessoal!

Como já ví que o rafael_czy conseguiu fazer o código da maneira dele, e mais um amigo resolveu participar do tópico postando algumas ideias de código e até com verificação vou postar o meu, sem verificação, apenas com a conversão básica, aliás, 2 formas que me vieram a mente. Seguem:class StringToInt{ public static void main(String[] args){ String a = "1234"; System.out.print(stringToInt(a)); } public static int stringToInt(String str){ int inteiro = 0; for(int i = 0; i < str.length(); i++){ inteiro *= 10; inteiro += str.charAt(i)-'0'; } return inteiro; } }Outra forma:class StringToInt{ public static void main(String[] args){ String a = "1234"; System.out.print(stringToInt(a)); } public static int stringToInt(String str){ int inteiro = 0; int exp = str.length()-1; for(int i = 0; i < str.length(); i++){ inteiro += ((int)str.charAt(i)-'0')*Math.pow(10,exp--); } return inteiro; } }
Abraço!

davibuzzato valeu desde q tu postou ate agora estou analizando. ótimo aprendizado essas tres versoes. grato
Vingdel muito interessante: nao usaste nehuma array. vou estudar os teus tb. eu estava querendo ver isso. grato
Marcoy vou visitar um sebos aqui em porto Alegre, espero encontrar!
A todos abração!

Aqui está meu código melhorado, fiz minha forma de validação da string após análise do código do davidbuzzato. public static int stringToInt(String str) throws NumberFormatException{ int inteiro = 0; int count = 0; if(str.charAt(0) == '-') count = 1; while(count < str.length()){ if(str.charAt(count) >= '0' && str.charAt(count) <= '9'){ inteiro *= 10; inteiro += str.charAt(count++)-'0'; }else throw new NumberFormatException("Para a string entrada: \""+str+"\""); } if(str.charAt(0) == '-') return -inteiro; return inteiro; }Abraço!

[code]// pessoal esse codigo converte String para um float inserindo tanto uma virgula quanto um ponto

class Converte{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
String a = input.next();
System.out.printf("%.2f",stringToInt(a));
}
public static float stringToInt(String s){
float inteiro=0;
int cont=0;
int flu = 0;
int um = 1;
if(s.charAt(0)==’-’)
cont=1;
while(cont <s.length()){

			if(s.charAt(cont)==','||s.charAt(cont)=='.'){				  
			  cont++;
			  for(int i = cont; i&gt;&lt;s.length(); i++)			  
				um = um *10; 				 							
			 }
		   if(s.charAt(cont)&gt;='0' && s.charAt(cont) &lt;= '9'){
			   inteiro *= 10; 
               inteiro += s.charAt(cont++)-'0';			
			}		
	 }
	inteiro = inteiro/um;
     if(s.charAt(0) == '-')  
             return -inteiro;		
	 return inteiro;  		
    }     

} [/code]

andrews360, boa noite!

Bem-vindo ao GUJ, por gentileza, edite sua postagem e coloque seu código entre as tags [code]. Sempre que postar códigos faça dessa forma.

Abraço!