2017-03-14 3 views
4

빠른 질문이 있습니다. 내 코드를 더 짧게 만들고 싶다. 그리고 나는 체크 박스를 어떤 방법으로 루프에 넣을 수 있는지 궁금하다. 이 코드 부분의 의미는 적어도 하나의 체크 박스가 선택되었을 때 "찾기"버튼을 활성화하는 것입니다. 모든 팁에 대해 미리 감사드립니다. 당신이 할 수 물론JAVA : 대안 (||)을 루프에 넣고 있습니까?

if (checkBoxes[0].isSelected() == true || checkBoxes[1].isSelected() == true 
      || checkBoxes[2].isSelected() == true || checkBoxes[3].isSelected() == true || checkBoxes[4].isSelected() == true 
      || checkBoxes[5].isSelected() == true || checkBoxes[6].isSelected() == true || checkBoxes[7].isSelected() == true 
      || checkBoxes[8].isSelected() == true || checkBoxes[9].isSelected() == true || checkBoxes[10].isSelected() == true 
      || checkBoxes[11].isSelected() == true || checkBoxes[12].isSelected() == true || checkBoxes[13].isSelected() == true 
      || checkBoxes[14].isSelected() == true || checkBoxes[15].isSelected() == true || checkBoxes[16].isSelected() == true 
      || checkBoxes[17].isSelected() == true || checkBoxes[18].isSelected() == true || checkBoxes[19].isSelected() == true 
      || checkBoxes[20].isSelected() == true || checkBoxes[21].isSelected() == true) { 
     button.setEnabled(true); 
+5

주 쉽습니다). 당신은 ** 이미 ** 부울 (isSelected에 의해 반환 된 것)을 가지고 있습니다, 당신은 다른 것을 제공하기 위해 비교할 필요가 없습니다. 부울을 테스트 할 때는 직접 if (boolValue)와 if (! boolValue)를 테스트하십시오. (잠재적 인 피해는 변수를 검사 할 때 변수가 true로 설정되고 if 블록으로 분기되는'=':'if (variable = true) '중 하나를 잊어 버렸을 때 발생합니다. –

+0

wouldn 이게 더 나은 http://codereview.stackexchange.com/에 물어 보지 않으시겠습니까? – davejal

+0

OP에서 현재 설명하고있는 것처럼 코드가 작동하기 때문에이 질문을 오프 토픽으로 닫으려고합니다. 이 문제에 대한 도움말은 http://codereview.stackexchange.com/ – davejal

답변

2

이 시도 :

for(int i=0; i < checkBoxes.length; i++) { 
    if(checkBoxes[i].isSelected()) { 
     button.setEnabled(true); 
     break; 
    } 
} 
6

:

boolean found = false; 
for (int i = 0; i < checkBoxes.length && !found; i++) { 
    found = checkBoxes[i].isSelected(); 
} 
if (found) { 
    button.setEnabled(true); 
} 

하거나 boolean 변수를 방지하고 첫 번째 선택 체크 박스를 찾을 루프의 탈옥 수 있습니다 : 당신이 따라

for (int i = 0; i < checkBoxes.length; i++) { // you can also replace this with enhanced 
               // for loop 
    if (checkBoxes[i].isSelected()) { 
     button.setEnabled(true); 
     break; 
    } 
} 
+1

에서 요청할 수 있습니다. 첫 번째 예는 상당히 좋습니다. 나는 또한'button.setEnabled (found);'를 사용하여 제안 할 것이다. – mcuenez

3

을 물론 배열을 사용하면 루프를 사용할 수 있습니다.

for (Checkbox checkBox : checkBoxes){ 
    if (checkBox.isSelected()){ 
     button.setEnabled(true); 
     break; 
    } 
} 
6

stream을 사용하기 : 여기

은 향상된 루프 버전입니다?

if (Arrays.stream(checkBoxes).anyMatch(checkbox -> checkbox.isSelected())) { 
    button.setEnabled(true); 
} 
-1
Boolean j = false; 
for (byte i = 0; i <= 21) 
    if (checkBoxes[i].isSelected() == true) { 
     j = true; 
     break; 
     if (j == true) { 
      //your code 
     } 

당신 반 사용이 코드 는 그`== TRUE '의 모든 완전히 불필요한 (잠재적으로 해로운 것을

+0

'for (byte i = 0; i <= 21;) '이것은 부정 루프로 연결됩니다. 'i'는 항상 21보다 작습니다. 그리고 어느 곳에서도 증가하지 않습니다. 그리고 iterating하는 동안'checkBoxes.length'를 사용하는 것이 더 좋습니다. 확인란이 추가되거나 제거 된 경우. 'for-loop' 조건을 갱신해야합니다. –

+0

감사합니다 && –

+0

에 대해이 사실이 사실입니다. –