2 回答

TA貢獻1770條經驗 獲得超3個贊
讓我們首先談談為什么你看到你所看到的。
我在這里重新發布了您的代碼,縮進已更改以反映嵌套:
for(int i = 0; i < array1.length; i++) {
for(int j = 0; j < array2.length; j++) { // <--- This loop
calculations = ((array1[i] + array2[j]) % 10);
}
calculationsArray.add(calculations);
}
讓我們來看看我在上面標記的那個內部循環。請注意,在循環的每次迭代中,您都設置calculations了一個新值。這會覆蓋之前計算的值,因此當內部循環完成運行時, 的值calculations將等于該循環中計算的最后一個值。這就是你實際看到的原因,因為
當 時i = 0,內循環的最后一次計算為(array1[0] + array2[6]) % 10,即(5 + 9) % 10= 4,
當 時i = 1,內循環的最后一次計算為(array1[1] + array2[6]) % 10,即(10 + 9) % 10= 9,
當 時i = 2,內循環的最后一次計算為(array1[2] + array2[6]) % 10,即(2 + 9) % 10= 1。
嘿,看![4, 9, 1]你看到的就是你的。
下一個問題是如何解決這個問題。我認為您在這里遇到的主要問題是雙重嵌套循環可能不是解決問題的方法。具體來說,這里的雙 for 循環將運行array1.length×array2.length次,這遠遠超過您需要它運行的次數。
所以第一個問題——循環應該運行多少次?好吧,您希望輸出數組的長度是兩個輸入數組中較長者的長度,即Math.max(array1.length, array2.length)倍數。你能做一個循環來計算那個數字嗎?
然后您需要處理這樣一個事實,即您的循環可能需要多次循環遍歷每個輸入數組。在您給出的示例中,您將讀取array1多次的值,因為array2更長,但是如果更長,您可能不得不讀取array2多次的值array1。
作為如何執行此操作的提示,請查看當索引變得太大時是否可以使用 mod 運算符%環繞。
希望這可以幫助!

TA貢獻1155條經驗 獲得超0個贊
怎么樣(未優化):
ArrayList<Integer> calculationsArray = new ArrayList<Integer>();
int calculations = 0;
int j = 0;
while (j < array2.size()) {
for (int i = 0; i < array1.size(); i++) {
calculations = ((array1.get(i) + array2.get(j)) % 10);
calculationsArray.add(calculations);
}
j++;
}
添加回答
舉報