我有一個練習,找出出了什么問題。我將不勝感激:)
撰寫將具有兩個 int 型別陣列和更大的回傳陣列(如果兩個陣列之一更大)以及與該陣列相同位置的元素的總和的代碼。
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]);
}
}
}
}
uj5u.com熱心網友回復:
它應該是
for (int i = 0; i < lengthB; i )
當你使用
for (arrayB[i] = 0; i < lengthB; i )
您將陣列的第一個元素設定為 0,而不是您可能想要的 i 索引變數。
此外,你應該做一些事情,比如找到哪個陣列更大,然后使用像 bigArray = arrayA, smallArray = arrayB 這樣的變數。然后,您只需撰寫一個 for 回圈。
uj5u.com熱心網友回復:
您的代碼中幾乎沒有更正。
- 用于迭代的索引值應從 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]);
}
}
}
}
uj5u.com熱心網友回復:
再次嘗試檢查第一個 For 回圈的條件。如果您嘗試訪問某個位置的陣列,該位置大于陣列長度,您將得到 java.lang.ArrayIndexOutOfBoundsException。如果您無法理解它,我建議您應該嘗試除錯此代碼。
uj5u.com熱心網友回復:
應該選擇一個更大的陣列(或最后一個),并且應該添加元素直到較短陣列的末尾。
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]
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/346355.html
上一篇:Java優先級佇列比較器語法
