2016-03-19 3 views
0

Я делаю гадать игру для удовольствия. По какой-то причине код в цикле for никогда не обрабатывается. Я сделал это на три части. Пожалуйста, дайте мне знать. Кто-нибудь может мне помочь? Я проверил, и код не продолжает цикл int for. Я уверен, что нет ничего плохого в цикле for. Благодарим Вас за hwlp Благодаряfor loop (Java)

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.Random; 

public class Guess { 
    public static Random r = new Random(); 
    public static BufferedReader in = new BufferedReader(
      new InputStreamReader(System.in)); 

    public static final String YES_S = "y"; 
    public static final String NO_S = "n"; 

    public static void main(String [] args) throws IOException { 
     boolean menu = true; 
     boolean start = false; 
     boolean end = false; 
     boolean ans = true; 
     boolean rand = true; 

     int num = -1; 

     int guessNum = -1; 

     while(menu) { 
      System.out.println("Start game [ y ]:"); 
      String input = in.readLine(); 

      if(input.equals(YES_S)) { 
       menu = false; 
       start = true; 
       end = false; 
      } 
     } 

     while(start) { 
      while(ans) { 
       while(rand) { 
        num = r.nextInt(11); 
        rand = false; 
       } 

       for (int i = 0; i > 3; i++) { 
        System.out.println(" Guess a number from 0 to 10 :"); 
        String input1 = in.readLine(); 
        guessNum = Integer.parseInt(input1); 
        if (guessNum == num) { 
         System.out.println(" Congratulations !"); 
         ans = false; 
         rand = true; 
        } else { 
         System.out.println(" Try again"); 

        } 


       } 
       if(ans = true) { 
        end = true; 
       } 
      } 

     } 
    } 
} 
+0

Сторона примечания: вы должны попробовать сделать меньше вещей одним способом. Цикл в цикле в цикле в цикле ... такой код становится недостижимым, второй закроет ваш редактор. Если вы программируете для развлечения; Я действительно рекомендую прочитать «Чистый код» Роберта Мартина; поскольку программирование еще более увлекательно, когда он все еще понимает свой код, не трогая его в течение нескольких дней. – GhostCat

ответ

0

Убедитесь, что if(ans = true) { является распайка и не является условием проверки

, если вы хотите, чтобы проверить значение ANS сделать

if(ans == true) { 

ИЛИ ДАЖЕ ЛУЧШЕ

if(ans) { 

другая причина, почему не работает, потому что это:

for (int i = 0; i > 3; i++) { 

условие никогда не встречались

сделать вместо

for (int i = 0; i < 3; i++) { 
+0

Извините, но я не понимаю, что вы имеете в виду? Я noob:/ – ugh

+1

Это не единственная проблема –

+1

Если вы пишете это: ** ans == true **, вы спрашиваете «если значение ans истинно», но когда вы делаете ** ans = true ** вы устанавливаете var ans в true .... –

6

Ну, давайте разложим ваш for цикл:

for (int i = 0; i > 3; i++) 
  1. i = 0
  2. Выполнение техобслуживания в то время как .... whops, вы видите проблему?
+0

Спасибо. wow я did not notic, что lol – ugh

+1

На всякий случай вам было интересно, почему я рекомендовал вам сосредоточиться на качестве вашего кода ... именно потому, что это помогает с такими ошибками. – GhostCat

0

Переверните оператор сравнения:

for (int i = 0; i < 3; i++) {
+0

Спасибо. ничего себе я не знал, что LOL – ugh

1
for (int i = 0; i > 3; i++) { 

Условие охранник никогда не верно - 0 > 3 ложно сразу, поэтому цикл никогда не заканчивается.

Используйте вместо этого i < 3.

1

У вас есть i> 3 и i = 0 ... 0 не больше 3. Итак, это неправильно! Измените следующим образом:

   for (int i = 0; i < 3; i++) { 
        System.out.println(" Guess a number from 0 to 10 :"); 
        String input1 = in.readLine(); 
        guessNum = Integer.parseInt(input1); 
        if (guessNum == num) { 
         System.out.println(" Congratulations !"); 
         ans = false; 
         rand = true; 
        } else { 
         System.out.println(" Try again"); 

        } 


       }