2016-03-19 171 views
0

我在做一个有趣的猜谜游戏。出于某种原因,for循环中的代码从不处理。我把它分成三部分。请让我知道有人可以帮我吗?我已经检查并且代码不会在for循环中继续。我确定for循环没有任何问题。感谢您的hwlp感谢for循环(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

备注:您应该尽量少用一种方法。一个循环循环在一个循环循环中...这样的代码变得不可维护,第二个关闭你的编辑器。如果你是为了好玩而编程的;我真的推荐阅读Robert Martin的“Clean Code”因为编程更有趣,因为在没有触摸它几天后仍然能够理解他的代码。 – GhostCat

回答

0

检查if(ans = true) {是分配新建分配FY而不是检查条件

如果你想检查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 = true **你正在设置var ans为true .... –

6

好吧,让我们分解你的for循环:

for (int i = 0; i > 3; i++) 
  1. 开始i = 0
  2. 执行机构,而i > 3 .... whops,你看到这个问题?
+0

谢谢。哇,我没有注意到,大声笑 – ugh

+1

只是万一你想知道为什么我建议你专注于你的代码的质量......正是因为这有助于这样的错误。 – GhostCat

0

翻转你的比较操作:

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

谢谢。哇,我没有注意到,大声笑 – ugh

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

防护的条件是不正确的 - 0 > 3马上是假的,所以循环永远不会运行。

改为使用i < 3作为后卫。

1

你有我> 3和我= 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"); 

        } 


       }