这段代码如何在每三位数之前添加逗号?

Tom*_*eit 6 java math

帮助我理解这段代码的工作原理.它基本上将逗号添加到一串数字中.因此,如果用户键入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);
}
Run Code Online (Sandbox Code Playgroud)

I'll解释我理解的是

所述for环路基本上计数用户已写入到避免将逗号所述第一数量(例如,1111)之前的数目的长度.虽然i小于它减去的字符串的长度1.

result返回位置处的char i,因为它向下计数它会从右向左返回"相反"的字符.

nDigits0通过循环在每次迭代的初始值上加1 .

我想现在我无法确切地看到发生了什么:if ("nDigits % 3) == 0.

因此,对于通过循环的两个第一次迭代,它将不执行if循环,因为:

  • 1%3 = 1
  • 2%3 = 2
  • 3%3 = 0

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'.一切都被添加到结果的前面,而不是像你通常期望的那样.

希望这可以帮助!