0

好的,我在获取数字并将它们存储到 int 数组时遇到了问题。我有代码的基本轮廓,但是我无法以一种在一组非零数字前面有 0 时显示的方式存储它们。

例如,当我这样做时:

String s = "030142165109876";
private static void breakCode(String s){
    int x = s.length(), m = 0, l = x/5;
    String[] array = s.split("");
    int[] output = new int[l+1];
    int[] results = new int[array.length];

    for(int i = 0; i < x/5; i++){
        double y = 0;
        if(i == 0){
            for(int r = 5; r >= 0; r--){
                try {results[m] = Integer.parseInt(array[m]);} catch (NumberFormatException nfe) {};
                y = y + (Math.pow(10, r) * results[m]);
                m++;
            }
            output[i] = (int) y;
            System.out.println(output[i]);
        }
        if (i != 0){
            for(int r = 4; r >= 0; r--){

                try {results[m] = Integer.parseInt(array[m]);} catch (NumberFormatException nfe) {};
                y = y + (Math.pow(10, r) * results[m]);
                m++;
            }
            output[i] = (int) y;
            System.out.println(output[i]);
        }

    }
}

此代码的输出是:

3014
21651
9876

如何让零保持在左侧?我知道这是因为我正在使用幂函数,并且打印时不会显示该幂的最左侧值。有什么方法可以强制 int 数组保存 5 位数字,以便当数字小于 10000 时,它将最左边的值保存为 0?第二行不以 0 开头,因此它正确保存了所有 5 个数字,但不是第一个和第三个(我写了数字作为示例,实际程序使用随机数字)。

完全公开,这是一个作业,但我想出的解决这个问题的编程方法并没有解决它。我已经在整个网站上广泛搜索了我的具体问题(相信我,我已经开始喜欢在这里搜索),但我没有找到任何关于这个具体问题的有用花絮。这也是我自己解决问题的方法,如果有办法在 int 数组中保存 5 位数字,那么我很乐意用我的解决方案来做,而不是让我朋友的编码伙伴想出一个真正的不是我自己的创意的优雅解决方案。

谢谢

PS我很啰嗦

4

2 回答 2

0

默认情况下,数字始终存储 [1] 并打印不带零。这就是 Java(以及几乎所有其他语言)的工作方式。

如果您只想打印5 位数字,请考虑printf.

printf("%05d\n", output[i]);

如果您真的想始终存储5 位数字,请使用String[]并拆分 usingString方法。的substring方法String应该很容易做你想做的事。

[1] 从概念上讲(并且在大多数(如果不是全部的话)实际目的中),我们将数字存储在没有前导零的情况下。事实上,严格来说,它没有。Java 分配一些内存来存储您的数字,并将这块内存设置为零。作为一个完整的记忆片段,它确实有前导零,但底层处理会丢弃这些零,因为这就是我们理解数字的方式。

于 2013-09-30T03:27:40.250 回答
0

首先将输入拆分为 5 个字符长的字符串,然后将它们解析为ints:

String[] parts = str.split("(?<=\\G.{5})");
int[] nums = new int[parts.length];
for (int i = 0; i < parts.length; i++)
    nums[i] = Integer.parseInt(parts[i]);

正则表达式split()在每 5 个字符后导致拆分 - \G(最后一场比赛结束)确保没有重叠。

目前尚不清楚您的确切问题是什么,但如果它只是输出带有前导零的数字,我只会输出parts而不是将它们解析为int[]. 如果它是关于输出int带有前导零的值,请使用

System.out.println(new DecimalFormat("00000").format(nums[i]));

格式模式中的零意味着总是在那里打印一个数字。

于 2013-09-30T03:56:43.220 回答