你能解释一下它是如何工作的吗?

Can you explain how it works?

如果有人能给我正确的代码解释就太好了:)

代码有效,我喜欢它,但是在我学习的过程中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());
         }

     }

while(n > 0) {

int n 大于 0 时,执行以下操作。

int digit = n % 10;

一个新的 int digit 被初始化为 n MODULO 10。模 returns 除法 n / 10 的余数。例如,如果 n 是 21,它将 return 1.

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

一个新的 int square 被初始化为 digit 乘以自身的乘积。使用 0 和 square 作为参数调用 class StringBuilder 中的方法 insert()。 0 是偏移量,square 是要插入的字符值。

n = Math.floorDiv(n, 10);

Math.floorDiv() returns 小于或等于代数商的最大(最接近正无穷大)整数值。例如 Math.floorDiv(25, 5) 将 return 5.

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

最后,你 return 你之前建立的价值。 builder.toString() return 将 StringBuilder 对象作为字符串。 Integer.valueOf(String str) 用于 return 一个 Integer 对象保存指定的 String str.

的值

我们取 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):将第0位的square值插入到builder中。

6)n = Math.floorDiv(n, 10);: Math.floorDiv(int x,int y) returns 小于或等于代数商的最大(最接近正无穷大)整数值。 n = 2.

7) 用值 2 重复步骤 2。digit 变成 2,square 变成 4,builder 插入值 4,但是 25 已经存在,所以最新的值4 附加到 25。

8) n 变为 Math.floorDiv(2, 10) 其中 returns 0.2。在检查 while 条件时,它不满足等式。

9) builder 使用 toString() 转换为字符串,使用 Integer.parseInt(),它将返回的字符串值转换为整数,最终 returns 425.