2017-01-10 76 views
0

我希望我的程序顯示沒有「null」的結果。我明白,當我總結str1 + str2時,str1等於null,這就是爲什麼結果不正確,但我不知道如何解決它。在開始時顯示結果爲「null」

static String str1; 
static String str2; 
public static void ConvertBinaryArrayToInt(List<Integer> binary) { 
    for (int i = 0; i<binary.size(); i++){ 
     int c = binary.get(i); 
     str2 = String.valueOf(c); 
     str1 = str1 + str2; 
    } 
    System.out.println(str1);  
} 


public static void main(String[] args){ 
    List<Integer> binary1 = new ArrayList<>(4); 
    binary1.add(0,1); 
    binary1.add(1,0); 
    binary1.add(2,1); 
    binary1.add(3,1); 
    BinaryArrayToNumber.ConvertBinaryArrayToInt(binary1); 
} 
+9

只是初始化str1如下:'static String str1 =「」;' –

+0

你確定你的程序做了你想做的事嗎?字符串中的加號'+'符號實際上是將字符串連接起來(它並不總和int值)。不確定這是你的意圖,還是將二進制數字轉換爲十進制數字,因爲在描述中使用了術語「總結」。 – vefthym

+0

作爲可讀性和避免錯誤的問題,總是*始終*初始化變量。 Java爲字段(包括靜態字段)分配默認值,因此可以讓您不用顯式初始化就可以離開,但我的建議是不依賴於它。 –

回答

1

一個解決它是做

str1 = (str1 == null ? "" : str1) + (str2 == null ? "" : str2); 

但是,你應該爲此創建一個方法非常小的方式,而不是

private String safeConcatenate(String str1 String str2) { 
    if (str1 == null && str2 == null) 
     return ""; 
    if (str1 == null) 
     return str2; 
    if (str2 == null) 
     return str1; 
    return str1 + str2; 
} 

如果您不需要保留變量相同,那麼這也應該工作:

private String safeConcatenate(String str1, String str2) { 
    if (str1 == null) 
     str1 = ""; 
    if (str2 == null) 
     str2 = ""; 
    return str1 + str2; 
} 
+0

小錯字:在第二個代碼部分,在:「if(stt2 == null)」應該是「str2」。 –

+0

「如果你不需要保持變量相同」 - 這個限定詞沒有意義。在方法中重新分配局部變量對方法外的變量沒有影響。 – khelwood

+0

@Yogev謝謝 –