我有一个项目要求我编写一个方法将两个整数数组合并为一个整数数组。要求是数组的每个值可能只有一个数字。例如" 1"但不是" 11"并且原始的两个阵列可以是不同的长度。该项目背后的想法是,这些数组的长度应该比整数变量的允许长度长。我们应该创建这个新数组,这样我们就可以打印出每个位置,基本上是用大数字进行数学运算而不使用long。 这就是我现在所拥有的。
public static int[] add ( int[] arr1, int[] arr2) {
int length;
if (arr1.length >= arr2.length) {
length = arr1.length;
}
else {
length = arr2.length;
}
int[] smallAr = new int [length];
int[] bigAr = new int [length];
if (arr1.length > arr2.length) {
for (int i = 0; i < length; i++) {
smallAr[i] = arr2[i];
bigAr[i] = arr1[i];
}
}
else {
for (int i = 0; i < length; i++) {
smallAr[i] = arr1[i];
bigAr[i] = arr2[i];
}
}
int[] addition = new int[length];
for (int i = 0; i < length; i++) {
if (i > smallAr.length -1) {
addition[i] = bigAr[i];
}
else {
addition[i] = bigAr[i] + smallAr[i];
}
}
return addition;
}
这当前在运行时出现了一个越界错误。我也明白,如果阵列需要额外的空间来进行携带,这将无法正常工作。对此的任何帮助都会很棒!
答案 0 :(得分:1)
第一步,创建一个足够长度的新数组 - 找到arr1.length
和arr2.length
的最大值。第二步,将两个数组中每个有效索引的总和分配给输出数组 - 如果数组长度大于或等于当前索引,则将值默认为零。第三步,返回新数组。像,
public static int[] add(int[] arr1, int[] arr2) {
int[] r = new int[Math.max(arr1.length, arr2.length)];
for (int i = 0; i < r.length; i++) {
r[i] = (i < arr1.length ? arr1[i] : 0) + (i < arr2.length ? arr2[i] : 0);
}
return r;
}