如果你想保持4095 if語句的話我會做這樣的事情:
@Override
public void onClick(View v) {
if (! processPart1(v)) {
processPart2(v);
}
}
private boolean processPart1(View v) {
if (q1.isChecked() && !q2.isChecked() && !q3.isChecked() && !q4.isChecked() && !q5.isChecked() && !q6.isChecked() && !q7.isChecked() && !q8.isChecked() && !q9.isChecked() && !q10.isChecked() && !q11.isChecked() && !q12.isChecked()) {
// do your thing
return true;
}
else if (!q1.isChecked() && q2.isChecked() && !q3.isChecked() && !q4.isChecked() && !q5.isChecked() && !q6.isChecked() && !q7.isChecked() && !q8.isChecked() && !q9.isChecked() && !q10.isChecked() && !q11.isChecked() && !q12.isChecked()) {
// do your thing
return true;
}
// more conditions here...
return false;
}
private void processPart2(View v) {
// more conditions
}
但是你可以實現這個更快,也更容易模塊化:
boolean q[] = {q1.isChecked(), q2.isChecked(), q3.isChecked(),
q4.isChecked(), q5.isChecked(), q6.isChecked(),
q7.isChecked(), q8.isChecked(), q9.isChecked(),
q10.isChecked(), q11.isChecked(), q12.isChecked()};
int value = 0;
for (int i = 0, len = q.length; i < len; i++) {
value += (q[i] ? 1 : 0) << i;
}
switch(value) {
case 0: // do your thing
case 1: // do your thing
case 2: // do your thing
// more case statements ...
}
雖然您的代碼必須經過2048年if語句平均上面的代碼只處理12個值,然後直接跳轉到正確的case語句。它也更不容易出錯,並可以像這樣輕鬆地拆分成不同的方法:
processValues0To1023(value);
processValues1024To2047(value);
processValues2048To3071(value);
processValues3072To4095(value);
private void processValues0To1023(int value) {
switch(value) {
case 0: // do your thing
// more case statements ...
}
}
private void processValues1024To2047(int value) {
switch(value) {
case 1024: // do your thing
// more case statements ...
}
}
private void processValues2048To3071(int value) {
// ditto
}
private void processValues3072To4095(int value) {
// ditto
}
我敢肯定有比4095 ifs更好的方法。如果你發佈了一些代碼,我們可能會給你一些想法,如何以不同的方式實現它。如果這不是你想要的將代碼分割成幾種方法? –
是的,正是我想要的..將代碼分成兩部分,但仍然使用1個按鈕.. @Emanuel – user3322959
你能告訴我們你想做什麼。如果我們可以優化if語句,我們可以提供幫助 – Dexters