Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Dúvida no Ex. 15 da Aula 3 - Java.lang

Vi a resposta e não entendi nada, porque é feito esse calculo:

  resultado = resultado * 10 + (algarismo - '0');

e qual a função desse método:

numero = numero.substring(1);

Poderiam me explicar detalhadamente, vi a duvida de uma pessoa no fórum que foi explicada e ainda sim não entendi nada. rs

9 respostas
solução

Olá André! Veja só, no exercício é ensinado que uma outra forma de você converter uma String em int é fazendo da seguinte forma:

char c = '3';
int i = c - '0';

No entanto, perceba que isso é para números com apenas 1 caracter, como: 1, 2, 3, 4, 5 , e etc. No exercício é pedido que você converta "762". Para isso, é feito um while(), para percorrer cada caracter de "762" e converter este em um int. Vamos analisar o código:

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;
    }

Veja, o numero em String é recebido como parâmetro. O código dentro do while() é o código de conversão de cada caracter. Assim, a condição para que o Loop continue ocorrendo e consequentemente a conversão dos caracteres continue ocorrendo, é que o tamanho da String numero, passada como parâmetro, seja maior que 0.

Vamos analisar passo a passo. a String recebida é "762". Assim, ao iniciar o método é dado o valor 0 a variável resultado. então é começado o while() pois, perceba que é atendida a condição o tamanho, lenght(), de "762" é 3 e 3 > 0.

Então, através do método charAt(index), é possivel pegar o caracter referente a posição indicada pelo inteiro passado como parâmetro, assim, o inteiro 0 se refere ao primeiro caracter da String. então é pego o primeiro caracter de "762", ou seja o '7', e guardado na variável algarismo.

Então o caracter '7' é convertido pra int através da forma como foi dita na questão algarismo - '0'. Mas eu sei que ser.. porque fazer resultado * 10.

Vejá só, como resultado = 0 então será armazenado na primeira conversão o valor 7 na variável resultado pois ficará:

resultado = 0 * 10 + 7
resultado = 7

Após feito isso, é feito numero = numero.substring(1);

O método substring(), devolve uma string a partir de um determinado caracter, e este caracter é conhecido através da posição passada como parâmetro. Exemplo:

String fruta = "banana";
fruta.substring(1) // vai me devolver a String "anana"
fruta.substring(2) // vai me devolver a String "nana"
fruta.substring(4) // vai me devolver a String "na"

Assim quando é feito numero.substring(1)é devolvido a String "62" e este valor é salvo novamente na variável numero. Então perceba que o tamanho (lenght()) da String armazenada em numero agora é 2 e por 2 > 0 o loop é refeito. Porém, no inicio, a variável resultado era 0, agora a variável resultado vale 7. Então é pego o primeiro caracter da String, porem a String sendo "62", o primeiro caracter agora é '6'. Esse caracter é convertido para int através da forma: algarismo - '0'. Mas agora veja a diferença do que acontece:


resultado = 7 * 10 + 6
resultado = 76

Então, é feito resultado * 10, para q caso a String tenha mais que um caracter, do segundo caracter a ser convertido em diante, sempre seja adicionado a direita do primeiro ja convertido. Assim, é feito os demais passos e é convertido todos os caracteres, pois a String sempre vai diminuindo o tamanho graças ao método substring()

Enfim, espero ter ajudado! Bons Estudos!

Boa explicação!

Romário, muito obrigado, agora entendi.

Ajudou muito.

Parabéns pela explicação Romário !!!

parabéns, muito explicativo

Excelente explicação Romário! Obrigado!

Excelente

Parabens, excelente explicação.

Excelente explicação, obrigado

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software