2013-06-26 111 views
0

我正在使用Woodstock組件的Web應用程序上工作。簡而言之,如果下拉值等於「PRIMARY KEY」,則函數應該將表格名稱(從文本字段)存儲到字符串pk/primaryKey中。StringBuilder不會追加空格嗎?

我目前面臨的問題是,從功能上得到的結果是:

"abc" 

,而不是

"a, b, c" 

這究竟是爲什麼?

public void addPK(TextField tf, DropDown dd, StringBuilder pk, int val) { 
    if (((String) dd.getValue()).equals("PRIMARY KEY")) { 
     if (val == 0) { 
      pk.append((String) tf.getValue()); 
      val++; 
     } else { 
      pk.append(", " + (String) tf.getValue()); 
     } 
    } 
} 


public String createButton1_action() { 
    StringBuilder primaryKey = new StringBuilder(); 
    int pkCheck = 0; 

    addPK(column_TF1, pkDropDown1, primaryKey, pkCheck); 
    addPK(column_TF2, pkDropDown2, primaryKey, pkCheck); 
    addPK(column_TF3, pkDropDown3, primaryKey, pkCheck); 
    . 
    . 
} 

謝謝。

+2

'pkCheck'始終爲0'VAL ++取代;'不會影響由於'if'已經執行,'else'不會被執行。 – Maroun

+0

謝謝大家。我其實錯過了這麼簡單的事情。 –

回答

3

pkcheck值始終爲0,當你調用你的方法 'addPK'。 ■對於無論是增量pkcheck值後,每通話或者你可以用stringbuider長度值CHEAK你可以改變你的方法一樣

選項1.

public void addPK(TextField tf, DropDown dd, StringBuilder pk) { 
    if (((String) dd.getValue()).equals("PRIMARY KEY")) { 
     if (pk.length()== 0) { 
      pk.append((String) tf.getValue()); 
     } else { 
      pk.append(", ").append((String) tf.getValue()); 
     } 
    } 
} 


選項2.

public int addPK(TextField tf, DropDown dd, StringBuilder pk, int val) { 
    if (((String) dd.getValue()).equals("PRIMARY KEY")) { 
     if (val == 0) { 
      pk.append((String) tf.getValue()); 
      val++; 
     } else { 
      pk.append(", " + (String) tf.getValue()); 
     } 
    } 
    return val; 
} 


public String createButton1_action() { 
    StringBuilder primaryKey = new StringBuilder(); 
    int pkCheck = 0; 

    pkCheck = addPK(column_TF1, pkDropDown1, primaryKey, pkCheck); 
    pkCheck = addPK(column_TF2, pkDropDown2, primaryKey, pkCheck); 
    pkCheck = addPK(column_TF3, pkDropDown3, primaryKey, pkCheck); 
    . 
    . 
} 

*如果你的a重新使用的StringBuilder或StringBuffer的最好的做法是使用而不是 '+' 運算

pk.append(", " + (String) tf.getValue()); 

追加操作與
pk.append(", ").append((String) tf.getValue()); *

+0

+1爲詳細代碼。 – stinepike

2

因爲你發送VAL參數值爲0

int pkCheck = 0; 

    addPK(column_TF1, pkDropDown1, primaryKey, pkCheck); // value is 0 here 

和addpK方法

if (val == 0) { 
    pk.append((String) tf.getValue()); 
    val++; 
} 

因此,爲了得到你需要設置P確認的其它值的價值期望的結果而不是0

+1

認爲OP的意圖_is_發送零,但認爲val ++會改變外部值pkCheck – epoch

+0

@epoch ..你傳遞參數作爲值。所以它會改變局部範圍的值。但pcheckes的值不會被更改爲 – stinepike

2

你有調試嗎? val一直停留在0。在你的方法中修改它沒有任何作用。

即執行val++變化pkCheck


供參考:java-is-pass-by-value

+2

+1供參考。 – stinepike