Java 创建长度不确定的数组?

Java 创建长度不确定的数组?,java,arrays,Java,Arrays,我应该以数组的形式加上两个数字 范例 839 as an array, {9,3,8} 2039 {9,3,0,2} 之所以是向后的,是因为我们必须从自己的位置开始。我只是不知道数组的大小应该是多少 public static int[] add(int [] x, int[] y){ int[] z = new int [x.length]; int j=0, hold, i; for(i=0; i<=z.len

我应该以数组的形式加上两个数字

范例

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

2039 {9,3,0,2}
之所以是向后的,是因为我们必须从自己的位置开始。我只是不知道数组的大小应该是多少

public static int[] add(int [] x, int[] y){

     int[] z = new int [x.length];

     int j=0,
         hold,
         i;

     for(i=0; i<=z.length-1;i++) {

        z[i]=(x[i]+y[i]+j)%10;
        j=(x[i]+y[i]+j)/10;

     }
公共静态int[]add(int[]x,int[]y){
int[]z=新的int[x.length];
int j=0,
持有
我

对于(i=0;i而言,不执行加法实际上不可能确定结果的确切大小;您真正确定的是,它将是
Math.max(x.length,y.length)
Math.max(x.length,y.length)+1

因此,我认为有三种方法:

  • 您始终可以分配
    Math.max(x.length,y.length)+1
    ,并接受有时会有额外的前导零。
    • 但是在这种情况下,为了避免在每次加法中添加越来越多的零,您可能需要预先计算
      x
      y
      中前导零的数量,并从总数中扣除这些前导零。这最终会使IMHO变得不必要的复杂
  • 可以进行两次加法:一次确定长度以便创建数组,另一次实际填充结果
  • 您可以首先分配
    Math.max(x.length,y.length)+1并进行加法,然后如果最高有效位为零,则可以分配
    Math.max(x.length,y.length)
    并复制除该零之外的所有数字。(您可能希望用于此。)

如果使用整数对象而不是基元int,则可以执行以下操作

Integer x = 1234;
x.toString().length();
这个怎么样

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;
}
公共静态int[]add(int[]x,int[]y){
int[]z=新的int[x.length+y.length];
int i=0;
对于(int j=0;i0;i++){
整数和=(i
您遇到的错误是什么?您可以将数组的大小作为两个数字的最大长度。数组不够大,无法容纳所有数字,因此如果我添加不同长度的数字,一些数字会被截断,如果它们相同,则前面会有额外的0。不幸的是,我的数组可能会重复教授很笨,不让我们学数学。否则我早就做完了,还有别的方法吗?@Fluxia:我不是说你需要用
数学
。我知道Java,你也知道Java,所以
数学.max(x.length,y.length)
只是我告诉你的一个方便的方法“无论是
x.length
还是
y.length
,以较大者为准"。使用
if
语句,或者使用三元运算符
…?:
来实现这一点对您来说很简单。我已经尝试过了,但我的教授最初在我的项目中失败了。还有其他方法吗?您可以使用Arrays.copyOf,然后重复创建当前s的新数组ize+1(根据需要)