2016-02-12 81 views
0

else if語句中使用CheckBox時出現問題。我有一個CheckBox列表,如:if else語句複選框未按預期執行

cbapel, cbmangga, cbjeruk, cbbelimbing. 

當我勾選複選框cbapelcbmanggacbjeruk結果是 「2」,而不是 「4」。什麼是解決方案?

if(MainActivity.cbapel.isChecked() && MainActivity.cbbelimbing.isChecked()) { 
    tx.setText("1");} 
else if(MainActivity.cbapel.isChecked() && MainActivity.cbjeruk.isChecked()) { 
    tx.setText("2");} 
else if(MainActivity.cbapel.isChecked() && MainActivity.cbmangga.isChecked()) { 
    tx.setText("3");} 
else if(MainActivity.cbapel.isChecked() && MainActivity.cbmangga.isChecked() && MainActivity.cbjeruk.isChecked()) { 
    tx.setText("4");} 
else { 
    tx.setText("NOT FOUND"); 
} 
+1

爲什麼重複檢查MainActivity.cbapel.isChecked()?將它移動到if語句中,可以發佈樣本輸入輸出嗎? –

+0

?我沒有得到你想要做的事情。 – Newbiee

回答

1

你真的可以俯瞰簡單的解決方案在這裏,到目前爲止(假設你只是計數檢查箱子的數量)

int checked = 0; 
if (MainActivity.cbapel.isChecked()) { 
    checked++; 
} 

if (MainActivity.cbbelimbing.isChecked()) { 
    checked++; 
} 

if (MainActivity.cbmangga.isChecked()) { 
    checked++; 
} 

if (MainActivity.cbjeruk.isChecked()) { 
    checked++; 
} 

if (checked == 0) { 
    tx.setText("NOT FOUND"); 
} else { 
    tx.setText(String.valueOf(checked)); 
} 

如果你是不是想找來算的複選框,然後我認爲這跟你在你的問題中所嘗試的邏輯是一樣的,但是會記錄下一個條件。

String value = ""; 

boolean bool1 = MainActivity.cbapel.isChecked(); 
boolean bool2 = MainActivity.cbbelimbing.isChecked(); 
boolean bool3 = MainActivity.cbmangga.isChecked(); 
boolean bool4 = MainActivity.cbjeruk.isChecked(); 

if (bool1) { 

    if (bool3 && bool4) { 
     value = "4";  
    } else if (bool3 && !bool4) { 
     value = "3"; 
    } else if (!bool3 && bool4) { 
     value = "2"; 
    } 

    if (value.isEmpty() && bool2) { 
     value = "1"; 
    } 
} else { 
    value = "NOT FOUND"; 
} 

tx.setText(value.isEmpty() ? "NOT FOUND" : value); 
+0

但是,OP不一定要將文本設置爲檢查的#個框。所以,如果'cbmangga.isChecked()'應該只是「3」。但是,如果這和'cbjeruk.isChecked()'?我認爲OP真的需要更好的設計,因爲這種看起來更像'RadioButtons'? – codeMagic

+0

@Alfiansyah - 不,我不會糾正你的pastebin鏈接 –

+0

@codeMagic - 據我所知,有4個複選框。從問題'cbapel'被選中,然後**設置數字?那是你在說什麼? –

0

使用此監聽到每個複選框,設置相應的條件

類CheckboxListeners實現CompoundButton.OnCheckedChangeListener {

private CheckBox checkbox; 

    CheckboxListeners(CheckBox checkbox) { 
     this.checkbox = checkbox; 

    } 

    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 


     checkbox.setChecked(isChecked); 

    } 


} 
1

else if(MainActivity.cbapel.isChecked() && MainActivity.cbjeruk.isChecked()) {

讓我們來看看這個...

MainActivity.cbapel.isChecked()?是

MainActivity.cbjeruk.isChecked()?是

因此,這將評估爲true,因此它不會檢查任何其他條件語句。

這個邏輯流有很多不同的方法。但是,要知道什麼對你的情況最好,取決於這些變量實際上意味着以及你在做什麼。

我可以給你提供的最好的建議是你首先檢查最多的過濾情況。所以...

if(MainActivity.cbapel.isChecked() && MainActivity.cbmangga.isChecked() 
    && MainActivity.cbjeruk.isChecked()) { 
     tx.setText("4"); 
} 

然後再加上else if s進行其他檢查。

此外,crickethis comment你每次檢查相同的條件下,所以你可以刪除,敷在同一個if去除一些重複一個很好的建議。

+0

MainActivity.cbapel.isChecked(),因爲複選框位於main2activity – Alfiansyah

+0

中的mainactivity和result texview中,這不是您在那裏顯示的過濾最多的情況。你錯過了一個複選框 –

+0

@ cricket_007怎麼樣?最後一個檢查3個複選框。這應該先走了,除非我失去了一些東西 – codeMagic