我似乎有一个问题,我期望的输出是:
9000 + 200 + 50 + 6
但我得到:
90000 + 2000 + 500 + 60
这是我的代码:
class Kata
{
public static String expandedForm(int num) {
String s = String.valueOf(num);
StringBuilder result = new StringBuilder();
for(int i = 0; i < s.length(); i++) {
if(s.charAt(i) == '0') continue;
result.append(s.charAt(i) + makesZero(s.length() - i));
if(i != s.length() - 1) result.append(" + ");
}
return result.toString();
}
public static String makesZero(int num) {
StringBuilder result = new StringBuilder();
for(int i = 0; i < num; i++)
result.append("0");
return result.toString();
}
}
public class Main {
public static void main(String args[]) {
System.out.println(Kata.expandedForm(9256));
}
}
最佳答案
在
result.append(s.charAt(i) + makesZero(s.length() - i));
您正在位置i
处追加字符且length - i
为零的行。让我们看看 s="9256"
会发生什么。
如果i=0
s.charAt(i)
->s.charAt(0)
->'9'
(看起来不错)<makesZero(s.length() - i)
->makesZero(4 - 0))
->makesZero(4)
->“0000”
。
因此,正如您所看到的,您添加了一个额外的零,因为您没有考虑到虽然 9
代表千,但千虽然有 4 位数字,但应该有 3 个零。所以你需要减少一个零
makesZero(s.length() - i - 1)
。
顺便说一句 builder.append(foo + bar)
(当 +
表示串联而不是加法时)应写为 builder.append(foo).append (栏)
。否则你将以类似
builder.append(new StringBuilder().append(foo).append(bar).toString())
这意味着您仍然需要为每个 +
创建单独的构建器。
我们使用 StringBuilder#append
正是为了避免 +
和此类不必要的对象创建。
关于java - 我的代码结果不好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49716201/