我想為三個不同的陣列使用 3 個回圈結構。第一個回圈生成數字 0 到 49。第二個回圈獲取第一個回圈數字并將它們平方。第三個回圈保存所有 49 個值的總和。
如果我把它全部放在一個陳述句中,我會得到我想要的,除了它沒有填充每個陣列:
System.out.println(value[i] "\t" Math.pow(value[i], 2) "\t" (value[i] Math.pow(value[i], 2)));
我的代碼有問題。使用 print 陳述句后,我可以看到第一個回圈正常作業,但是它沒有填充第二個回圈,導致全為零。
int loopMax = 49;
value = new float [50];
valueSQ = new float [50];
sum = new float [value.length valueSQ.length];
for (i = 0; i < loopMax; i )
{
value[i] = i 1;
}
/*Results in 49 zeros*/
for (j = 0; j < loopMax; j )
{
valueSQ[j] = (float) Math.pow(value[i], 2);
//System.out.println (valueSQ[j]);
}
/*Results in all zeros*/
for (k = 0; k < loopMax; k )
{
sum[k] = valueSQ[j] value[i];
System.out.println (sum[k]);
}
這是我的基本代碼。我認為零是因為我沒有正確填充第二個陣列。我嘗試創建新陣列,因為我無法更改舊陣列,但它沒有幫助。有人可以向我解釋我做錯了什么或者為什么我在第一個回圈后得到全零嗎?
uj5u.com熱心網友回復:
sum[k] = valueSQ[j] value[i];
值 j 和 i 不是您需要的值。
將上面的行更改為:
sum[k] = valueSQ[k] value[k];
編輯:正如@SagunDevkota 已經說過的,在你的第二個回圈中,
改變:
valueSQ[j] = (float) Math.pow(value[i], 2);
至
valueSQ[j] = (float) Math.pow(value[j], 2);
這樣做的原因是因為 i 沒有為第二個回圈重置,也不會像 j 那樣增加。
您應該認為 i 超出了第二個和第三個回圈的范圍,而 j 超出了第三個回圈的范圍。
正如@JonSkeet 所說,在這種情況下,最好在需要它們的地方宣告變數:
for (i = 0; i < loopMax; i ) {
value[i] = i 1;
}
for (j = 0; j < loopMax; j ){
valueSQ[j] = (float) Math.pow(value[i], 2);
}
這向我們展示了 i 和 j 都被宣告為實體變數、靜態變數,或者在此代碼所來自的方法中更早的時候。
如果您洗掉這些變數,并像這樣重新撰寫代碼:
for (int i = 0; i < loopMax; i ) {
value[i] = i 1;
}
for (int j = 0; j < loopMax; j ){
valueSQ[j] = (float) Math.pow(value[i], 2);
}
當您嘗試編譯它時,編譯器會告訴您您正在使用 i 超出其范圍。變數 i 只存在于第一個回圈的范圍內,因此第二個回圈的代碼不會編譯。
uj5u.com熱心網友回復:
在第二個回圈中將 value[i] 更改為 value[j]
valueSQ[j] = (float) Math.pow(value[j], 2);
在第三個回圈中將 valueSQ[j] 更改為 valueSQ[k] 并將 value[i] 更改為 value[k]
sum[k] = valueSQ[k] value[k];
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/512467.html
標籤:爪哇数组for循环
