2013-02-01 19 views
3

我有一段令我困惑的代碼。我在if/else語句中定義了一個整數數組,因爲數組的長度取決於方法的2個輸入的長度。我的問題是,在if/else語句之外,變量定義似乎丟失了。在循環內部定義的Java變量似乎無法在循環外部識別出來?

import java.util.Arrays; 

public class test { 

    public String AddArrays(int [] arg1, int [] arg2) { 
    int L1 = arg1.length; 
    int L2 = arg2.length; 
    if (L1 > L2) { 
     int[] output = new int[L2]; 
     for (int i = 0; i < L2; i++) { 
      output[i] = arg1[i] + arg2[i]; 
     } 
    } else { 
     int[] output = new int[L1]; 
     for (int i = 0; i < L2; i++) { 
      output[i] = arg1[i] + arg1[i]; 
     } 
    } 
    String result = Arrays.toString(output); 
    return result; 
    } 
} 

我得到的錯誤是在Eclipse的地方告訴我,output不能被解析爲一個變量的聲明String result = Arrays.toString(output);

...順便說一下,是的,我知道這不是添加兩個整數數組的方法 - 我從更復雜的代碼中減少了這個來演示問題!

+4

http://www.java-made-easy.com/variable-scope.html – madhead

+0

我同意。按設計工作。不是一個真正的問題。 – EJP

回答

5

定義output之前if聲明。就像這樣:

int[] output; 
int L1 = arg1.length; 
int L2 = arg2.length; 
if (L1 > L2) { 
    output = new int[L2]; 
    for (int i = 0; i < L2; i++) { 
     output[i] = arg1[i] + arg2[i]; 
    } 
} else { 
    output = new int[L1]; 
    for (int i = 0; i < L2; i++) { 
     output[i] = arg1[i] + arg1[i]; 
    } 
} 
String result = Arrays.toString(output); 
return result; 
} 

當你if聲明它僅僅只有該塊範圍內聲明output

+0

但是'output'的長度取決於if/then的結果。如果arg1較大,那麼長度應該是L2,或者如果arg2較大,那麼長度應該是L1。還是有我應該使用的另一種方法?謝謝。 – lynvie

+0

但是你還沒有創建對象。你只需聲明'output'將是一個數組。這樣你就說'嗨,我知道我將使用int數組輸出',但我不知道如何初始化它,但保持冷靜。我將在稍後的幾個指令中初始化它。「 –

3

變量的範圍始終是下一個包含{}

事業開始在其聲明中(而不是在{

0

您在聲明輸出變量裏面每個if/else語句的局部變量。要解決這個問題,首先要在外面聲明它,然後調整它並返回結果。這使它保持在括號{ }之間的範圍內。

public String AddArrays(int [] arg1, int [] arg2) { 
    int L1 = arg1.length; 
    int L2 = arg2.length; 
    int[] output; 
    if (L1 > L2) { 
     output = new int[L2]; 
     for (int i = 0; i < L2; i++) { 
      output[i] = arg1[i] + arg2[i]; 
     } 
    } else { 
     output = new int[L1]; 
     for (int i = 0; i < L2; i++) { 
      output[i] = arg1[i] + arg1[i]; 
     } 
    } 
    String result = Arrays.toString(output); 
    return result; 
} 
2

嗯,你已經得到了解決,但我想指出的是,可以減少你的方法,以避免重複代碼,你正在做的事情。

您可以根據L1 > L2的結果使用conditional operators來創建陣列。而不是重複,直到L1L2,你應該迭代,直到數組長度output

所以,你可以嘗試使用下面的代碼: -

public String addArrays(int [] arg1, int [] arg2) { 
    int L1 = arg1.length; 
    int L2 = arg2.length; 

    int[] output = L1 > L2 ? new int[L2]: new int[L1]; 

    for (int i = 0; i < output.length; i++) { 
     output[i] = arg1[i] + arg2[i]; 
    } 

    return Arrays.toString(output); 
} 

並請遵循Java命名約定。方法名稱應以小寫字母開頭。

相關問題