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:
- Inicialmente
resultado = 0
, numero="762"
. numero
não é uma string vazia (tamanho zero), então continuamos- Vamos obter o caracter na posição 0, no nosso caso o "7".
- 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
. - Temos assim que
resultado
= 7 - 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"
- Vamos entrar no loop novamente pois a String numero nao esta vazia.
- Agora temos que
resultado = resultado * 10 + 6 = 7 * 10 + 6"
. - Novamente fazemos
numero = numero.substring(1) = "2"
- Numero não é vazio então entramos de novo no loop
- 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: - Agora
numero = numero.substring(1) = "2".substring(1) = "";
- 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.