【发布时间】:2017-01-03 23:25:54
【问题描述】:
任务是在从右到左看的每三个数字之后添加。所以数字 1000000 应该是 1,000,000 等等。
我对如何解决这个问题有比较好的想法,但我不知道为什么我没有输出。也许我犯了一些我不知道的错误或什么......
我认为我理解字符串是不可变的概念,因此它们不能就地更改,当您想将某些内容更改为字符串时,您必须创建新的字符串对象。但我不明白这怎么可能:
`result = ch + result;`
还有这个
result = "," + result;
我在这里做错了什么?
import acm.program.*;
import acm.util.*;
public class AddCommasToNumericString extends ConsoleProgram{
public void run(){
while(true){
String digits = readLine("Enter a numeric string: ");
if (digits.length() == 0) break;
println(addCommasToNumericString(digits));
}
}
public String addCommasToNumericString(String digits){
String result = "";
int counter = 0;
for (int i = digits.length()-1; i <= 0 ; i--){
char ch = digits.charAt(i);
result = ch + result;
counter++;
if (counter % 3 == 0){
result = "," + result;
}
}
return result;
}
}
【问题讨论】:
-
NumberFormat.getNumberInstance(Locale.US).format(digits)将完成这项工作。 -
@bhantol 当然可以,但我怀疑他的任务是手动执行此操作以学习如何使用字符串。
-
是的,这就是我问的原因,所以我不发布这个简单的解决方案。
-
如果你还没有找到答案为什么你可以在字符串不可变时执行
result = "," + result,这是因为所有变量都是对象的引用而不是对象他们自己。因此,当您说result = something...时,您只是将变量result设置为引用一个新字符串;你实际上并没有改变字符串本身。