Можете ли вы объяснить, как это работает? - PullRequest
0 голосов
/ 08 ноября 2019

Было бы замечательно, если бы кто-то мог дать мне правильное объяснение кода:)

Код работает, и мне это нравится, однако, поскольку я изучаю Java, нужно понимать каждый его кусочек.

Спасибо!

Проверено StringBuilder() - выглядит нормально, однако часть внутри loop не совсем ясна.


    public class SquareDigit {

        public int squareDigits(int n) {
               StringBuilder builder = new StringBuilder();

               while(n > 0) {
                   int digit = n % 10;

                   int square = digit * digit;
                   builder.insert(0, square);

                   n = Math.floorDiv(n, 10);
               }

               return Integer.valueOf(builder.toString());
         }

     }

Ответы [ 2 ]

1 голос
/ 08 ноября 2019
while(n > 0) {

Пока int n больше 0, выполните следующие действия.

int digit = n % 10;

Новый int digit инициализируется как n MODULO 10. По модулю возвращается остаток от деления n / 10Так, например, если n равно 21, он вернет 1.

int square = digit * digit;
builder.insert(0, square);

Новый int square инициализируется как произведение digit раз. Метод insert() из класса StringBuilder вызывается с 0 и square в качестве параметров. 0 - это смещение, а square - это значение символа, которое нужно вставить.

n = Math.floorDiv(n, 10);

Math.floorDiv() возвращает наибольшее (ближайшее к положительной бесконечности) целочисленное значение, которое меньше или равно алгебраическому частному. Например, Math.floorDiv(25, 5) вернет 5.

return Integer.valueOf(builder.toString());

Наконец, вы вернете значение, которое вы создали ранее. builder.toString() возвращает объект StringBuilder в виде строки. Integer.valueOf(String str) используется для возврата Integer объекта, содержащего значение указанного String str.

0 голосов
/ 08 ноября 2019

Давайте возьмем n=25. После передачи значения в squareDigits(int 25).

1) Сначала создается StringBuilder.

2) while(n > 0): 25> 0, поэтому оно удовлетворяет условию для полученияв цикл.

3) int digit = n % 10: n = 5.

4) int square = digit * digit: квадрат = 25.

5) builder.insert(0,square): вставляетЗначение square на 0-й позиции в builder.

6) n = Math.floorDiv(n, 10);: Math.floorDiv(int x,int y) возвращает наибольшее (самое близкое к положительной бесконечности) целочисленное значение, которое меньше или равно алгебраическому коэффициенту. n = 2.

7) Повторяет шаг 2 со значением 2. digit становится 2, square становится 4, builder вставляет значение 4, но 25 уже присутствует, поэтому самое последнее значение 4добавляется к 25.

8) n становится Math.floorDiv(2, 10), что возвращает 0,2. При проверке условия while оно не удовлетворяет уравнению.

9) builder преобразуется в строку с помощью toString() и с помощью Integer.parseInt() преобразует возвращаемое значение строки в целое число, которое в итоге возвращает 425.

...