cami-la / mentoria_GFT_START_5_23052022

Desafio Técnico GFT Start #5
26 stars 3 forks source link

Desafio 1: NumeroReverso #4

Open paulofranklins2 opened 2 years ago

paulofranklins2 commented 2 years ago

Pode não ser a maneira mais apropriada, mas decidi compartilhar para que não de a impressão de que a única forma de reverter o número seja transformando ele em String. Como disse, pode não ser a maneira mais adequada, porem interessante buscar outras formas somente para testes e aprendizado.


import java.util.Scanner;

import static java.lang.String.copyValueOf;
import static java.lang.String.valueOf;

// #1
public class ReverseNumberNoConvert {
    public static void reverseNumber() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Input must have 4 digits, between 1000 and 9999.");
        int input = scanner.nextInt();
        while (input < 1000 || input > 9999) {
            System.out.println("Input must have 4 digits, between 1000 and 9999.");
            input = scanner.nextInt();
        }
        String savingReverseNumber = "";
        String convertToString = valueOf(input);
        System.out.println("Input: " + convertToString);
        char reverseNum;
        for (int i = 0; i < convertToString.length(); i++) {
            reverseNum = convertToString.charAt(i);
            savingReverseNumber = reverseNum + savingReverseNumber;
        }
        System.out.println("Output: " + savingReverseNumber);
    }
}

// #2
class ReverseNumberNoStringBuilder {
    public static void reverseNumber() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Input must have 4 digits, between 1000 and 9999.");
        int reverseNum = 0;
        String savingNumb = "";
        int input = scanner.nextInt();
        while (input < 1000 || input > 9999) {
            System.out.println("Input must have 4 digits, between 1000 and 9999.");
            input = scanner.nextInt();
        }
        System.out.println("Input: " + input);
        for (; input != 0; ) {
            reverseNum *= 10;
            savingNumb += input % 10;
            input = input / 10;
        }
        System.out.println("Output: " + savingNumb);
    }
}

// #3
class ReverseNumber {
    public static void reverseNumber() {
        Scanner scanner = new Scanner(System.in);
        do {
            System.out.println("Input must have 4 digits, between 1000 and 9999.");
            int input = scanner.nextInt();
            String inputConvertToString = valueOf(input);
            if (input >= 1000 && input <= 9999) {
                StringBuilder stringBuilder = new StringBuilder(inputConvertToString);
                System.out.println("input: " + input);
                System.out.println("output: " + stringBuilder.reverse());
                break;
            }
        } while (true);
    }
}

class ReverseNumberMain {
    public static void main(String[] args) {
        ReverseNumberNoConvert.reverseNumber();
        ReverseNumberNoStringBuilder.reverseNumber();
        ReverseNumber.reverseNumber();
    }
}
cami-la commented 2 years ago

Ótimo amigo! Muito obrigada pelo interesse em compartilhar seu conhecimento. <3

Quando eu falei que "Você não consegue pegar um numeral e pegar o inverso dele" estava me referindo que a classe Integer não tem um método que faz essa função.

Logo, podemos transformar esse Integer ou o tipo primitivo int em uma StringBuilder e utiliza o método reverse() que faz isso de uma forma relativamete simples. (:

Ah, outro colega também compartilhou uma forma de fazer utilizando resto da divisão:

while(numero != 0)
    {
        restante = numero % 10;
        reverso = reverso * 10 + restante;
        numero = numero/10;
    }

    System.out.println(reverso);

De fato, para um problema, exitem n maneiras de interpretar e resolver. Cabe a nós como bons programadores, encontrarmos a maneira de resolver que performa melhor! (:

Bons estudos e sigo à disposição.

paulofranklins2 commented 2 years ago

Obrigado Camila <3 Como você mesma disse reverter um integer não dá, porem ha N formas de fazer. Como disse eu só quis compartilhar outras formas de fazer.