Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Esta logica foi passada pelo professor guilherme silveira mas eu nao entendi

Sera que alguem pode me explicar essa logica por favor, não estou conseguindo entender, desde ja agradeço

 public class DesafioConversaoDeNumeros {

            public static void main(String[] args) {
                String numero = "762";
                System.out.println("Imprimindo a string: " + numero);

                int resultado = converteParaInt(numero);
                System.out.println("Imprimindo o int: " + resultado);
            }

            private static int converteParaInt(String numero) {
                int resultado = 0;
                while (numero.length() > 0) {
                    char algarismo = numero.charAt(0);
                    resultado = resultado * 10 + (algarismo - '0');
                    numero = numero.substring(1);
                }
                return resultado;
            }
        }
2 respostas
solução!

Olá Roger,

Vou tentar te explicar com o exemplo que está aí em cima os passos de execução.

O objetivo do programa é converter uma String para um Inteiro. Existem métodos prontos em Java que te permitem fazer isso, como o Integer.parseInt.

Bom, como faríamos para transformar uma String "762" em um inteiro?

Se eu pegasse os caracteres da String 7,6, e 2, transformasse para os inteiros 7, 6 e 2, eu faria a multiplicação:

int resultado = 7 * 100 + 6 * 10 + 2;

Fazemos essa multiplicação por potências de 10 porque trabalhamos na base 10.

Existem diversas formas de fazer essa conversão da String para o Inteiro, mas isso é outra história. Vamos ver como ele está fazendo:

  1. Inicialmente resultado = 0, numero="762".
  2. numeronão é uma string vazia (tamanho zero), então continuamos
  3. Vamos obter o caracter na posição 0, no nosso caso o "7".
  4. Caracteres são representados como inteiros no computador, mas o caracter "7" não tem representação numérica 7, e sim 55 (considerando como enconding a tabela ASCII, mas não se preocupe com isso). Os caracteres numéricos estão em ordem na tabela, então o "0" está na posição 48, o que é bem conveniente, para obter o número como '7' - '0' = 7.
  5. Temos assim que resultado= 7
  6. Na execução de numero = numero.substring(1), estamos obtendo uma substring a partir do primeiro caracter da String no nosso caso "7" esta na posicao 0, e "6" na posicao 1, entao agora temos: numero = "62"
  7. Vamos entrar no loop novamente pois a String numero nao esta vazia.
  8. Agora temos que resultado = resultado * 10 + 6 = 7 * 10 + 6".
  9. Novamente fazemos numero = numero.substring(1) = "2"
  10. Numero não é vazio então entramos de novo no loop
  11. Agora temos o resultado: resultado = resultado*10 + 2 = (7*10 + 6) * 10 + 2 = 7 * 100 + 6*10 + 2, e é justamente o que nós queríamos como retorno! Se você observar, o 7 precisa ser multiplicado por 100, e ele passou três vezes no nosso loop, sendo multiplicado por 10 duas vezes. O 6 passou pela segunda vez e agora está sendo multiplicado por 10 na segunda vez. O 2 passou uma única vez, e não irá passar novamente, pois:
  12. Agora numero = numero.substring(1) = "2".substring(1) = "";
  13. Como numero é uma string vazia não passamos mais no loop e retornamos o resultado.

Fazemos a reatribuição a número em numero = numero.substring(1) porque as Strings no Java são imutáveis.

Caso não tenha pegado o padrão ainda da quantidade de vezes que multiplicamos por 10, experimente fazer os mesmos passos acima para um número de quatro dígitos como 2569.

obg amigo