2016-10-06 2 views
-1

|| 사용 동작이 매우 혼란 스럽습니다. .equals 함수에 대한 연산자. 문자열 등에서 사용할 수없는 이유가 있습니까?Java while while 루프를 만드는 문자열 테스트가 다르게 작동합니다.

이 작품 :

do{ 
    System.out.println("Play again? [Y/N]"); 
    //input: Y  
    play = in.nextLine(); 
    play = play.toUpperCase(); 

} 
while(!"Y".equals(input)); //breaks out of loop (as it should) 

왜하지 않습니다이 작품!

do{ 
    System.out.println("Play again? [Y/N]"); 
    //input: Y  
    play = in.nextLine(); 
    play = play.toUpperCase(); 

} 
while(!"Y".equals(input) || !"N".equals(input)); //infinite loop 
+5

'||'는 단락 회로 연산자입니다. 사실 일 때까지 테스트 할 것입니다. 그래서, 그것은 처음에'! "Y". equals (input)'이 거짓임을 알아내어 다음 문장을 테스트합니다. 이 경우,'Y'가'N'이 아니기 때문에 항상 참일 것입니다. –

+0

'N' 전에'!'를 제거해야합니다. –

+2

'input' 값은 루프에서 변경되지 않습니다. – saka1029

답변

17

단어를 삽입 해 봅시다.

"사과가 아니거나 오렌지가 아닌 한이 과일을 전부 먹어 라."

  • 딸기 : 사과가 아닙니다. 계속하십시오.
  • 바나나 : 사과가 아닙니다. 계속하십시오.
  • 오렌지 : 사과가 아니므로 계속하십시오.
  • 사과 : 사과입니다. 실제로는 오렌지색이 아니므로 ... 계속 ... ...... (
  • 사과 인 경우 "오렌지색이 아님", 오렌지색이면 "사과가 아닙니다" 사실 것입니다... 그것이 키위의 경우 모두에 해당 될 것입니다 (당신이 폭발하거나 혼수 상태에 충돌하지 않는 한) 먹는 걸 멈출 수있는 방법은 없습니다

    잘못된 논리가 과일에 의해 죽음에 사람들을 이끌고

    당신 "사과가 아니고 오렌지가 아닌 이상이 모든 과일을 먹고 싶다."

    +4

    haha ​​"나쁜 논리는 사람들을 과일로 인도합니다." 설명하는 멋진 방법 :) – Gaur93

    +0

    정직하게는, 나는 잠시 본 가장 유례.:) – Li357

    +0

    이것은 내가 본 최고의 CS 수업입니다! – progyammer

    1

    ||은 OR을 의미합니다.

    A || A가 참이거나 B가 참이면 B가 참입니다.

    두 번째 while 루프에서 : !"Y".equals(input)은 Y가 입력 값과 같으므로 false입니다. 그러나 N이 입력과 같지 않으므로 !"N".equals(input)이 참입니다. Hense 전체 조건이 참이면 while 루프로 다시 들어갑니다. 첫 번째 부분은 true의 경우, 다음 두 번째 조건은 첫번째 경우는, 다음 두 번째 하나에 해당하는 경우, 결과는 참 거짓 평가되어 평가되지 않으면

    0

    일부 또는 조건이

    처럼 작동합니다.

    입력 값이 Y 인 경우 첫 번째 조건은 거짓이지만 두 번째 조건은 참입니다. 따라서 루프는 true로 평가됩니다.

    while 루프는 조건을 false로 만들 때까지 계속됩니다. 그러므로 그것은 계속됩니다.

    관련 문제