Arrays-Java,与数组相同位置的元素之和
Arrays-Java, sum of the elements in same positions with the array
我有一个练习,看看哪里出了问题。我将不胜感激:)
编写代码,将有两个 int 类型的数组和 return 更大的数组(如果两个数组之一更大)以及与数组相同位置的元素的总和。
public class TwoArrays {
public static void main(String[] args) {
int[] arrayA = {1, 5, 2, 6, 8};
int[] arrayB = {4, 5, 7, 10, 7, 9, 7};
int lengthA = arrayA.length;
int lengthB = arrayB.length;
int i=0;
if (lengthA < lengthB) {
for (arrayB[i] = 0; i < lengthB; i++) {
arrayB[i] = arrayA[i] + arrayB[i];
System.out.println(arrayB[i]);
}
} else if (lengthA > lengthB) {
for (arrayA[i] = 0; i < lengthA; i++) {
arrayA[i] = arrayA[i] + arrayB[i];
System.out.println(arrayA[i]);
}
} else {
for (arrayB[i] = 0; i < lengthB; i++) {
arrayB[i] = arrayA[i] + arrayB[i];
System.out.println(arrayB[i]);
}
}
}
}
应该是
for (int i = 0; i < lengthB; i++)
当你使用
for (arrayB[i] = 0; i < lengthB; i++)
您将数组的第一个元素设置为 0,而不是您可能想要的 i 索引变量。
另外,你应该做一些事情,比如找出哪个数组更大,然后使用像 bigArray = arrayA, smallArray = arrayB 这样的变量。然后,你只需要写一个for循环。
再次尝试检查第一个 For 循环的条件。如果您尝试在大于数组长度的位置访问数组,您将得到 java.lang.ArrayIndexOutOfBoundsException。如果您无法理解这段代码,我建议您尝试调试它。
您的代码中几乎没有更正。
- 用于迭代的索引值应该从0开始。
arrayB[i] = arrayA[i] + arrayB[i];
arrayA[i] = arrayA[i] + arrayB[i];
在上面的行中,如果索引值(i) 超过lengthA 或lengthB 的长度,JVM 有可能抛出ArrayIndexOutOfBoundsException。所以应该在每次迭代时检查它。一旦索引值超过lengthA或lengthB,零可以作为默认值添加到arrayB[i]。所以我使用三元运算符来检查每次迭代的索引值。
3. 不需要 else if 块。因为我们只使用 2 个数组,如果和其他对你的情况就足够了。
修改后的代码:
public class TwoArrays {
public static void main(String[] args) {
int[] arrayA = {1, 5, 2, 6, 8};
int[] arrayB = {4, 5, 7, 10, 7, 9, 7};
int lengthA = arrayA.length;
int lengthB = arrayB.length;
if (lengthA < lengthB) {
for (int i = 0; i < lengthB; i++) {
int temp = i < lengthA ? arrayA[i] : 0; // used ternary operator here
arrayB[i] = arrayB[i] + temp;
System.out.println(arrayB[i]);
}
} else {
for (int i = 0; i < lengthA; i++) {
int temp = i < lengthB ? arrayB[i] : 0; // used ternary operator here
arrayA[i] = arrayA[i] + temp;
System.out.println(arrayA[i]);
}
}
}
}
应选择更大的数组(或最后一个),并添加元素直到较短的数组结束。
public static int[] joinArrays(int[] a, int[] b) {
int[] shorter, bigger;
if (b.length < a.length) {
shorter = b;
bigger = a;
} else {
shorter = a;
bigger = b;
}
for (int i = 0; i < shorter.length; i++) {
bigger[i] += shorter[i];
}
return bigger;
}
测试:
int[] arrayA = {1, 5, 2, 6, 8};
int[] arrayB = {4, 5, 7, 10, 7, 9, 7};
System.out.println(Arrays.toString(joinArrays(
new int[]{1, 5, 2, 6, 8},
new int[]{4, 5, 7, 10, 7, 9, 7}
)));
输出:
[5, 10, 9, 16, 15, 9, 7]
我有一个练习,看看哪里出了问题。我将不胜感激:)
编写代码,将有两个 int 类型的数组和 return 更大的数组(如果两个数组之一更大)以及与数组相同位置的元素的总和。
public class TwoArrays {
public static void main(String[] args) {
int[] arrayA = {1, 5, 2, 6, 8};
int[] arrayB = {4, 5, 7, 10, 7, 9, 7};
int lengthA = arrayA.length;
int lengthB = arrayB.length;
int i=0;
if (lengthA < lengthB) {
for (arrayB[i] = 0; i < lengthB; i++) {
arrayB[i] = arrayA[i] + arrayB[i];
System.out.println(arrayB[i]);
}
} else if (lengthA > lengthB) {
for (arrayA[i] = 0; i < lengthA; i++) {
arrayA[i] = arrayA[i] + arrayB[i];
System.out.println(arrayA[i]);
}
} else {
for (arrayB[i] = 0; i < lengthB; i++) {
arrayB[i] = arrayA[i] + arrayB[i];
System.out.println(arrayB[i]);
}
}
}
}
应该是
for (int i = 0; i < lengthB; i++)
当你使用
for (arrayB[i] = 0; i < lengthB; i++)
您将数组的第一个元素设置为 0,而不是您可能想要的 i 索引变量。
另外,你应该做一些事情,比如找出哪个数组更大,然后使用像 bigArray = arrayA, smallArray = arrayB 这样的变量。然后,你只需要写一个for循环。
再次尝试检查第一个 For 循环的条件。如果您尝试在大于数组长度的位置访问数组,您将得到 java.lang.ArrayIndexOutOfBoundsException。如果您无法理解这段代码,我建议您尝试调试它。
您的代码中几乎没有更正。
- 用于迭代的索引值应该从0开始。
arrayB[i] = arrayA[i] + arrayB[i];
arrayA[i] = arrayA[i] + arrayB[i];
在上面的行中,如果索引值(i) 超过lengthA 或lengthB 的长度,JVM 有可能抛出ArrayIndexOutOfBoundsException。所以应该在每次迭代时检查它。一旦索引值超过lengthA或lengthB,零可以作为默认值添加到arrayB[i]。所以我使用三元运算符来检查每次迭代的索引值。 3. 不需要 else if 块。因为我们只使用 2 个数组,如果和其他对你的情况就足够了。
修改后的代码:
public class TwoArrays {
public static void main(String[] args) {
int[] arrayA = {1, 5, 2, 6, 8};
int[] arrayB = {4, 5, 7, 10, 7, 9, 7};
int lengthA = arrayA.length;
int lengthB = arrayB.length;
if (lengthA < lengthB) {
for (int i = 0; i < lengthB; i++) {
int temp = i < lengthA ? arrayA[i] : 0; // used ternary operator here
arrayB[i] = arrayB[i] + temp;
System.out.println(arrayB[i]);
}
} else {
for (int i = 0; i < lengthA; i++) {
int temp = i < lengthB ? arrayB[i] : 0; // used ternary operator here
arrayA[i] = arrayA[i] + temp;
System.out.println(arrayA[i]);
}
}
}
}
应选择更大的数组(或最后一个),并添加元素直到较短的数组结束。
public static int[] joinArrays(int[] a, int[] b) {
int[] shorter, bigger;
if (b.length < a.length) {
shorter = b;
bigger = a;
} else {
shorter = a;
bigger = b;
}
for (int i = 0; i < shorter.length; i++) {
bigger[i] += shorter[i];
}
return bigger;
}
测试:
int[] arrayA = {1, 5, 2, 6, 8};
int[] arrayB = {4, 5, 7, 10, 7, 9, 7};
System.out.println(Arrays.toString(joinArrays(
new int[]{1, 5, 2, 6, 8},
new int[]{4, 5, 7, 10, 7, 9, 7}
)));
输出:
[5, 10, 9, 16, 15, 9, 7]