2014-12-20 3 views
-4

이것은 Java 문제입니다. 이 "if"문 안에있는 while 루프를 KeyListener에 매달아 놓는 데 약간의 문제가 있습니다. 내 rectX - = snakeSpeedY를 반복하려고하면 다소 실망 스럽습니다.Java의 "while"문에 관해서 약간의 문제가 있습니다.

public void keyPressed(KeyEvent e) { 
    if (e.getKeyCode() == KeyEvent.VK_UP){ 
     AUTO = false; //boolean for automatic movement FYI. 
     while (snakeMoving == true) {//another boolean, for stoping and moving the snake 
      rectY -= snakeSpeedY; 
     } 

"if"문이 while 루프를 처리 할 수 ​​없는지 궁금한가요? 내가 잘못하고 있니? 모든 의견을 보내 주시면 감사하겠습니다.

편집 : 문제가 발생한 곳이기 때문에 주로이 코드에 집중했습니다. "If"대괄호를 포함하지 않아서 유감입니다.

+2

코드의 서식을 정리하십시오. 또한 예상되는 행동과 실제 행동을 명확하게 기술하십시오. – Simba

+2

먼저 닫는 중괄호'}'가 없습니다. 'if'는'while'과는 아무런 관련이 없습니다. 또한 while 루프는'snakeMoving'의 값을 변경하지 않기 때문에 절대로 루프를 빠져 나오지 않습니다. 마지막으로 제발 들여 쓰기를 수정하십시오. http://www.oracle.com/technetwork/java/codeconventions-150003.pdf – alfasin

+1

귀하의 요구 사항은 무엇입니까? 이것은 코드 리뷰 포럼이 아닙니다. – SMA

답변

0

두 가지 :

  1. 당신 닫는 괄호 ("}")이다 시계 - 항상 초보자 오류의 원천이지만, 루프가있다 특히. "if"문에 대괄호를 닫지 않았습니다. 그러나 정확히 어디에 넣는 지 중요합니다.

  2. 루프가 반복되는 동안 조건에 사용 된 변수를 변경해야합니다. 루프 내부 또는 더 복잡한 시나리오에서는 동안 동안 다른 스레드에서 루프 런타임이 발생합니다. 루프를 종료 할 수있는 유일한 다른 방법은 "break;"를 호출하는 것입니다. 당신은이 세 가지를하지 않는 것 같습니다. 그래서 무한 루프가됩니다.

+0

if 문 브래킷이 있는데, 의외로 예상치 못한 이유로 작동하지 않습니다. – CA1K

+0

@ CA1K, Alex가 언급 한 무한 루프가 있습니다. 나는 당신이 'while'대신에 'if'를 원하거나 두 가지 모두를 필요로하지 않는다고 생각합니다. –

+0

while 루프는 약 1 초 내에 수백만 또는 수십억 픽셀만큼 rect를 줄이는 것과 같습니다. 루프는 매우 빠릅니다. 루프 내부에 뱀을 다시 채워 넣어야합니다. 하지만 뱀 게임의 경우 여기서는 루프를 사용하면 안됩니다. –

관련 문제