【发布时间】:2012-09-15 21:06:04
【问题描述】:
帮助我了解这段代码的工作原理。它本质上是将逗号添加到一串数字中。因此,如果用户键入 1 到 3 位数字,则它不会改变。对于四位数字,它会添加一个逗号
- 1111 变成 1,111
- 11111 变成 11,111
- 111111111 变为 11,111,111
等等。代码如下:
private String addCommasToNumericString (String digits)
{
String result = "";
int len = digits.length();
int nDigits = 0;
for (int i = len - 1; i >= 0; i--)
{
result = digits.charAt(i) + result;
nDigits++;
if (((nDigits % 3) == 0) && (i > 0))
{
result = "," + result;
}
}
return (result);
}
我会解释我对它的理解
for 循环基本上计算用户写入的数字的长度,以避免在第一个数字之前放置逗号(例如,1111)。虽然i 小于字符串的长度,但它减去1。
result 返回位置 i 的字符,因为它是向下计数的,它从右向左返回“相反”的字符。
nDigits 在循环的每次迭代中将 0 的初始值加 1。
我想现在是我无法确切了解发生了什么的地方:if ("nDigits % 3) == 0。
所以对于循环的两个第一次迭代,它不会执行if 循环,因为:
- 1 % 3 = 1
- 2 % 3 = 2
- 3 % 3 = 0
nDigits 以1 开头,因为nDigits++ 代码在for 循环内,那么如何将逗号放在三位而不是两位之后呢?它如何知道只有 4 位或 5 位数字才能将逗号正确放置在位置 1 和位置 2 (1,111 - 11,111)?
【问题讨论】:
-
那个代码太糟糕了。你最好不要理解它。
-
代码从右开始,向左移动。这意味着任何插入都发生在 之后代码接下来要查看的位置。