帮助我理解这段代码的工作原理.它基本上将逗号添加到一串数字中.因此,如果用户键入1到3位数字,它将保持不变.对于四位数字,它会添加一个逗号
等等.这是代码:
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);
}
Run Code Online (Sandbox Code Playgroud)
I'll解释我不理解的是
所述for环路基本上计数用户已写入到避免将逗号所述第一数量(例如,1111)之前的数目的长度.虽然i小于它减去的字符串的长度1.
result返回位置处的char i,因为它向下计数它会从右向左返回"相反"的字符.
nDigits0通过循环在每次迭代的初始值上加1 .
我想现在我无法确切地看到发生了什么:if ("nDigits % 3) == 0.
因此,对于通过循环的两个第一次迭代,它将不执行if循环,因为:
nDigits1因为循环中的nDigits++代码而开始for,所以它如何将逗号放在三位而不是两位数之后呢?它是如何知道何时只有4或5位数字将逗号正确地放在位置1和2(1,111 - 11,111)?
小智 6
我认为解释这个问题的最简单方法是将其减慢到每次通过.
循环从字符串的结尾开始,所以如果你有字符串12345,那么在第一次循环结果之后,结果将为"5",nDigits将为1.
下一次,'4'将被添加到结果的前面,给你"45",nDigits将是2.
第三次,它将"3"添加到结果的前面,使得"345"然后if-then触发并在前面添加逗号.结果现在是",345".
更多传球将给你"12,345".
我觉得令人困惑的是,循环从'5'开始而不是'1'.一切都被添加到结果的前面,而不是像你通常期望的那样.
希望这可以帮助!