java - 我的代码结果不好

标签 java debugging

我似乎有一个问题,我期望的输出是:

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/

相关文章:

c - 从另一个 Visual Studio 项目调试 Visual Studio C 程序

c++ - eclipse Debug模式下的 GDB 找不到 stdlib/rand.c

java/android NullPointerException 在字符串上抛出

java - 使用 JAXB 解析 XML

Java 二叉树/访问者模式

java - 下载独立的 STS 后 Eclipse 停止工作

node.js - 如何退出nodejs Debug模式退出

java - 如何解决此错误消息以创建 Enum : "Project ' MyFunProject' is not a J2SE 5. 0 兼容项目。”

java - 如何将对象存储在硬盘上?

c++ - 将源代码与反汇编代码匹配