你能解释一下它是如何工作的吗?
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.
如果有人能给我正确的代码解释就太好了:)
代码有效,我喜欢它,但是在我学习的过程中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.