2014-02-26 4 views
0

제목은 아마도 유익하지 않을 것입니다. 그러나 여기 거래가 있습니다.다른 블록을 우회하지 않고 코드 블록을 실행하는 방법? Java

그가 두 번째로 통과하는 경우 사용자가 코드를 실행하길 원합니다. 내가 한 일은 if 문을 만들고 있었지만 이제는 나머지는 실행되지 않는다는 것을 알았습니다.

Scanner input = new Scanner(System.in); 
Random dice = new Random(); 
int counter = 1; 
boolean playing = true; 
boolean firstTimmer = true; 
boolean got = true; 

System.out.println("Welcome to numberMind! From 0 to x, you'll try to guess the random number!"); 
System.out.println("To quit, guess \"-1\"."); 
System.out.print("Insert x: "); 
int x = 1+input.nextInt(); 
int objective = dice.nextInt(x); 
System.out.print("Ok, I'm ready! What's your first guess? "); 
int guess = input.nextInt(); 


while (playing){ 
    if (guess == -1){ 
     playing = false; 
     break; 
    }else if (!firstTimmer){ 
     got = true; 
     System.out.print("Do you want to change the number range? Yes(1) No(2)"); 
     guess = input.nextInt(); 
     if (guess == 1){ 
      System.out.print("Insert the new x: "); 
      x = 1+input.nextInt(); 
     }else if(guess == 2){ 
      System.out.println("Let's go then!"); 
     }else{ 
      System.out.print("I didn't ask for that number did I? x won't change."); 
     } 
    }else{ 
     while(got){ 
      if (objective == guess){ 
       firstTimmer = false; 
       System.out.println("You guessed it in "+counter+" times!"); 
       counter = 1; 
       System.out.print("Do you want to paly again? Yes(1) No(2) "); 
       guess = input.nextInt(); 
       if (guess == 1){ 
        System.out.println("Great! Here we go..."); 
        got = false; 
        break; 
       }else if (guess == 2){ 
        System.out.print("Thanks for playing!"); 
        got = false; 
        playing = false; 
       }else{ 
        System.out.println("We didn't ask for that. NOW YOU PLAY SOME MORE!"); 
        got = false; 
        break; 
       } 
       break; 
      }else if (guess == -1){ 
       System.out.println("You quited :("); 
       break; 
      }else if (guess == -2){ 
       System.out.println("The correct answer is "+ objective); 
      }else if (counter >= 5 && (counter -5) % 3 == 0){ 
       if (objective % 2 == 0){ 
        System.out.println("The number is pair."); 
       }else{ 
      System.out.println("The number is odd."); 
       } 
      } 
      System.out.println("You have tryed " + counter++ + " times."); 
      System.out.print("What's your guess? "); 
      guess = input.nextInt(); 
     } 
    } 
} 

실행하려는 코드는 마지막 코드 이후입니다. 나는 그것을 해결할 아무것도 보이지 않는다. 감사합니다.

답변

2

else이 완료 될 때 스스로에게 묻기 시작하십시오 : guess != -1firstTimmer == true. firstTimmer을 설정하지 마십시오. else 블록을 통과하려면 true로 설정해야합니다. else if에서 break을 삭제해야합니다. 그렇지 않으면 다음 반복에서 다른 사용자에게 도달하지 않습니다.

또한 if 문에 playing = falsebreak을 모두 사용하는 것은 불필요합니다. 둘 다 똑같은 일을 개별적으로 할 것입니다.

while (playing){ 
    if (guess == -1){ 
     playing = false; 
     break; 
    }else if (!firstTimmer){ 
     got = true; 
     System.out.print("Do you want to change the number range? Yes(1) No(2)"); 
     guess = input.nextInt(); 
     if (guess == 1){ 
      System.out.print("Insert the new x: "); 
      x = 1+input.nextInt(); 
     }else if(guess == 2){ 
      System.out.println("Let's go then!"); 
     }else{ 
      System.out.print("I didn't ask for that number, x won't change."); 
     } 
     firstTimmer = true; 
     //break; 
    }else{ 
+0

실제로! 부울을 변경함으로써 코드를 사용할 수 있습니다. 그것을 해결, 정말 생각하지 않았습니다. – EnderEgg

+1

질문이 해결되면 내 대답 옆에있는 체크 표시를 클릭하고 해결 된 것으로 표시하십시오. 이렇게하면 미래의 검색에서 답이없는 질문으로 나타나지 않습니다. 원한다면 내 대답에 투표 할 수도 있습니다. – NobleUplift

+1

나는 이미 그것을 표시했다. 그리고 그것도 투표했습니다! 다시 한 번 감사드립니다 – EnderEgg

1
int counter = 0; 
while(playing) { 
    counter++;  //First iteration: was zero, now 1 
    if(counter == 2) { 
     //Do some special thing 
    } 
} 
1

(한) 이런 종류의 표준 패턴은 다음과 같습니다 또한

boolean firstTime = true; 
boolean playing = true; 
int guess = 0; 
while (playing) { 
    if (guess == -1) { 
     playing = false; 
     // NOTE: break is redundant with playing flag, here 
    } else if (!firstTime) { 
     got = true; 
     System.out.print("Do you want to change the number range? Yes(1) No(2)"); 
     guess = input.nextInt(); 
     if (guess == 1) { 
      System.out.print("Insert the new x: "); 
      x = 1+input.nextInt(); 
     } else if(guess == 2) { 
      System.out.println("Let's go then!"); 
     } else { 
      System.out.print("I didn't ask for that number, x won't change."); 
     } 
     firstTime = false; 
    } else { 
     //... do other work here. 
    } 
} 

는, aliteralmind 언급 패턴이 당신이를 제시 할 수 있도록 위의보다 유연한 버전 루프를 통해 모든 "방문"에 대해 다른 옵션. 나는 완전한 예를 들어, 필요한 경우 더 자세하게 기술 할 수있다.

+0

예, 카운터를 사용하는 방법을 알고 있습니다. 시간 내 주셔서 감사합니다. – EnderEgg

1

코드에서 한 번에 한 가지 문제를 해결해야합니다.

이제는 읽기가 어렵고 복잡한 코드가 많습니다.

첫 방문에 대한 귀하의 질문에 대한 답변입니다. 그냥 루프 전에 이동 한 다음 필요한 경우 루프를 시작하십시오.

하위 프로그램 (메소드)에서 문제를 나누고 한 번 씩 해결하십시오.

displayWelcomeScreen(); 
preapreGameContext(); 

do { 
if(doUserWantToChange()) { 
    changeTheGameContext(); 
} 
int gues = askForGues(); 

hasUserGuesCorrectly(); 

} while(isTheGameOn()); 

최종 코드는 위의 예와 비슷하게 보입니다.

관련 문제