创建一个不确定长度的数组?

时间:2018-04-18 04:39:23

标签: java arrays

我应该以{{1​​}}的形式添加两个数字,

例如

array

向后的原因是因为我们需要从这个地方开始。我无法确定数组的大小应该是什么。

839 as an array, {9,3,8}

2039 {9,3,0,2}

这就是我目前所拥有的,但数组的大小是问题所在。我觉得我已经尝试了所有的事情,但是我很高兴。

3 个答案:

答案 0 :(得分:0)

实际上无法在不执行添加的情况下确定结果的精确大小;所有你真正知道的事实是 Math.max(x.length, y.length) Math.max(x.length, y.length) + 1

所以,我认为有三种方法:

  • 您始终可以分配Math.max(x.length, y.length) + 1,并接受有时会有额外的前导零。
    • 但在这种情况下,为了避免在每次添加时添加越来越多的零,您可能需要预先计算xy中前导零的数量,以及从你的总数中扣除。这最终会造成不必要的复杂恕我直言。
  • 您可以添加两次:一次确定长度,以便您可以创建数组,一次实际填充结果。
  • 您最初可以分配Math.max(x.length, y.length) + 1并进行添加,然后如果最重要的数字变为零,您可以然后分配Math.max(x.length, y.length)并复制除了零之外的一切。 (您可能希望使用java.lang.System.arraycopy(...)。)

答案 1 :(得分:0)

如果使用Integer对象而不是基本int,则可以执行以下操作。

Integer x = 1234;
x.toString().length();

答案 2 :(得分:0)

这个怎么样?

public static int[] add(int[] x, int[] y) {
    int[] z = new int[x.length + y.length];
    int i = 0;

    for (int j = 0; i < x.length || i < y.length || j > 0; i++) {
        int sum = (i < x.length ? x[i] : 0) + (i < y.length ? y[i] : 0) + j;
        z[i] = sum % 10;
        j = sum / 10;
    }

//    return Arrays.copyOf(z, i);

    int[] res = new int[i];
    System.arraycopy(z, 0, res, 0, res.length);

    return res;
}