Converter String para inteiro sem Integer.parseInt

Seguinte

Tenho um exercicio aqui q me pediram pra montar… meio q um desafio q me deram… tentar converter uma string para inteiro sem utilizar nenhuma função da API JAVA.

Ja tentei de tudo … mas de tudo mesmo… até o casting nao vai…

Alguem por acaso sabe se tem como fazer? o q eu poderia ultilizar pra efetuar esta conversao.

transferencia de bits!! provavelment… porem nao sei nada sobre isso!!!

mas a string representa um numero ou é uma frase ou mesclado de tudo ?

Tem um metodo na Classe String que transforma objeto String num array de char não é ??

e char geralmente tem um valor inteiro lá de acordo com a tabela unicode!

Gambiarra!!!

tenho uma idéia doida ahuaha…
Analiza ela caracter por caracter e verifica se é digito (0-9) e então atribui a uma variável int por exemplo

Boa Sorte 8)

Kra nunc aparei pra pensar como faria n. Mas com certeza cast não daria certo =PP

Tenta pegando cada caractere da String (char) usando o método charAt, o algoritmo como disse nunca pensei, mas de antemão te digo q char são convertidos para int sem a necessidade de cast explicitos, afinal de contas char são números em última instancância, a unica diferça é q cada caractere é mapeado com um valor na tabela ASCII ou UNICODE. Acho q puraí vai.

String string = "OrlandoClinioPatriarcha";
      for( int i = 0; i < string.length(); i++){
          int code = string.codePointAt(i);
          System.out.print(code);
      }

era isso?

naonao… é pegar tipo

digite os numeros

123456

isso em string e escreve-los em inteiro

o valor inteiro é

123456

isso sem usar nenhum metodo de conversao do JAVA

Oi,
não tem como realizar isso… nem com transferencia de bits…
segue o exemplo abaixo:

[quote]int 1 Dec
0001 Bin (no caso, seria mais oito zeros na frente)

Char 1 Char
00110001 Bin (0011 seria o valor 3)[/quote]

Então… um cacatcter é muito mais do que um inteiro… ele teria um valor 3…
sem API acho que não rola…

Tchauzin!

em resumo… vc tem que criar o seu proprio metodo de conversão ??? é isso???

exatamente… eu até tentei isso aqui embaixo mas nao deu certo… ele compila e da um monte de caracer estranho nada a ver com o q eu pedi.

Mas to tentando aqui

[code]import javax.swing.JOptionPane;
public class Conversao{
public static void main(String args[]){

	String rec;
	int cont=0;
	int vet[];
	
	rec = JOptionPane.showInputDialog(null,"Digite somente numeros para efetuar a conversão sem a utilização das funções JAVA","Conversão sem Funcões Java", JOptionPane.QUESTION_MESSAGE);
	vet= new int[rec.length()];
	
		for(cont=0;cont<rec.length();cont++){
				
			int inteiro =rec.charAt(cont);
				
				vet[cont]=inteiro;
			}
	JOptionPane.showMessageDialog(null,"o valor inteiro é: "+vet);
	
	}
	
	}[/code]

Que tal assim?

[code]String numero = “1234”;

//Pega o valor de cada caracter ascii da string num vetor
byte[] numeros = numero.getBytes();
int total = 0;

for (byte b : numeros) {
int valor = b - 0x30; //Reduz o valor ascii do 0 (48 em decimal)
total = total * 10 + valor;
}

System.out.println(total);[/code]

Se nem o getBytes() for permitido, você ainda pode obter o valor por uma comparação e uma série de ifs ou como o switch do post abaixo…

eu tenho até vergonha de mostrar… rsrs…

public static void main(String[] args) {
		String str = "6";
		int num = 0;
		char c = str.charAt(0);
		int j = (int) c;
		
		switch (j) {
			case 48: num = 0;
				break;
			case 49: num = 1;
			break;
			case 50: num = 2;
			break;
			case 51: num = 3;
			break;
			case 52: num = 4;
			break;
			case 53: num = 5;
			break;
			case 54: num = 6;
			break;
			case 55: num = 7;
			break;
			case 56: num = 8;
			break;
			case 57: num = 9;
			break;
		}
		System.out.print(num);
	}

esse é o codigo mais horrivel que eu ja vi!!.. hahaha… motivo de piada!!.. mas ta ai! hahaha

perolas do GUJ!

[quote=erickcellani]eu tenho até vergonha de mostrar… rsrs…

public static void main(String[] args) {
		String str = "6";
		int num = 0;
		char c = str.charAt(0);
		int j = (int) c;
		
		switch (j) {
			case 48: num = 0;
				break;
			case 49: num = 1;
			break;
			case 50: num = 2;
			break;
			case 51: num = 3;
			break;
			case 52: num = 4;
			break;
			case 53: num = 5;
			break;
			case 54: num = 6;
			break;
			case 55: num = 7;
			break;
			case 56: num = 8;
			break;
			case 57: num = 9;
			break;
		}
		System.out.print(num);
	}

esse é o codigo mais horrivel que eu ja vi!!.. hahaha… motivo de piada!!.. mas ta ai! hahaha

perolas do GUJ![/quote]

hehehe eu tinha pensado assim tb…

Tá na mão.
Fiz poucos testes mas acho q está blz.
Tá bem comentado (até de mais).
Acho que dá pra entender.

Boa tarde pra vcs.

[code]public class Exemplo {

public static int toInt(String s){
    // Iniciando retorno
    int retorno = 0;
    
    // Loop do último para o primeiro caractere
    for (int i = s.length() - 1; i >= 0; i--){
        // Pegando o código ASCII
        int vlr = s.charAt(i);
        
        // Se não for número, retornando zero
        if (vlr < 48 || vlr > 57)
            return 0;
        
        // Retirando 48 pois '0' = 48, '1' = 49, '2' = 50, etc
        vlr -= 48;
        
        // Definindo a casa onde o nr irá ficar (dezena, milhar, etc)
        for (int j = 1; j < (s.length() - i); j++)
            vlr = vlr * 10;
        
        // Somando ao resultado
        retorno = retorno + vlr;
    }
    
    // Tudo pronto! Agora é só correr por abraço
    return retorno;
}

public static void main(String[] args){
    // Montando string
    String nr_str = "159967";
    // Convertendo
    int nr_int = toInt(nr_str);
    
    // Imprimindo o resultado, já numérico
    System.out.println(nr_int);
}

}[/code]

 Tenho um exercicio aqui q me pediram pra montar... meio q um desafio q me deram... tentar converter uma string para inteiro sem utilizar nenhuma função da API JAVA. 

Acho que a única coisa que você pode usar é “charAt”.
Dica:

  • O valor do caracter ‘0’, em Unicode, é 0x0030 (48 em decimal), ou então ‘0’.
    Para obter o valor decimal de um dígito, basta então subtrair ‘0’. Esquisito, não?
char caracter = '9';
int valor = caracter - '0';
System.out.println (valor); // imprime 9

Além disso, para converter para decimal, vá da esquerda para a direita, pegue o valor de cada dígito, e vá multiplicando os resultados anteriores por 10. Exemplo:

String s = “3141”
int valordonumero = 0
caracter na posição 0 = ‘3’
valordocaracter = 3
então faça valordonumero = valordonumero * 10 + valordocaracter. Isso dá 3.
caracter na posição 1 = ‘1’
valordocaracter = 1
então faça valordonumero = valordonumero * 10 + valordocaracter. Isso dá 3 * 10 + 1 = 31.
Faça isso até acabar a string. OK?

[quote=marciosantri]Tá na mão.
Fiz poucos testes mas acho q está blz.

// Definindo a casa onde o nr irá ficar (dezena, milhar, etc)
for (int j = 1; j < (s.length() - i); j++)
vlr = vlr * 10;
[/quote]

Note que a casa também poderia ser definida assim:

vlr = vlr * Math.pow(10, i);

O conhecimento dessa fórmula é muito importante se você quiser trabalhar com outras bases numéricas.

[quote=ViniGodoy][quote=marciosantri]Tá na mão.
Fiz poucos testes mas acho q está blz.

// Definindo a casa onde o nr irá ficar (dezena, milhar, etc)
for (int j = 1; j < (s.length() - i); j++)
vlr = vlr * 10;
[/quote]

Note que a casa também poderia ser definida assim:

vlr = vlr * Math.pow(10, i);

O conhecimento dessa fórmula é muito importante se você quiser trabalhar com outras bases numéricas.[/quote]

Verdade, Vinícius. Mas a intenção era simplificar o máximo possível o entendimento. Seu exemplo é de longe o mais prático. :smiley:

ah cara… conversão peso posicional tipo:

123456

o caracter 1 está na posicao 6 (de tras pra frente)
ai vc faz:
num += 110^6
num += 2
10^5
num += 3*10^4

entendeu?

Se a única limitação é não utilizar o “parseInt”, que tal assim:

Integer i = new Integer("1234");
System.out.println(i);
int ii = i;
System.out.println(ii);

[]´s,

Eu percebi, teu exemplo ficou muito legal. E beeem mais didático.