【问题标题】:How to repeat "if" statement when output is false当输出为假时如何重复“if”语句
【发布时间】:2015-09-25 00:19:01
【问题描述】:

我正在开发一个简单的游戏,用户必须在其中猜一个随机数。我已经设置了所有代码,除了如果猜测太高或太低,我不知道如何让他们重新输入一个数字并继续玩直到他们得到它。它只是停止;这是代码:

import java.util.Scanner;
import java.util.Random;

public class Test {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        Random rand = new Random();

        int random = rand.nextInt(10) + 1;

        System.out.print("Pick a number 1-10: ");
        int number = input.nextInt();

        if (number == random) {
            System.out.println("Good!");
        } else if (number > random) {
            System.out.println("Too Big");
        } else if (number < random) {
            System.out.println("Too Small");
        }
    }
}

【问题讨论】:

    标签: java if-statement repeat


    【解决方案1】:

    为了重复任何事情,你需要一个循环。

    重复直到满足循环体中间的条件的一种常见方法是构建一个无限循环,并添加一种方法来摆脱它。

    在 Java 中创建无限循环的惯用方式是 while(true)

    while (true) {
        System.out.print("Pick a number 1-10: ");
        int number = input.nextInt();
        if (number == random) {
            System.out.println("Good!");
            break; // This ends the loop
        } else if (number > random) {
            System.out.println("Too Big");
        } else if (number < random) {
            System.out.println("Too Small");
        }
    }
    

    此循环将继续迭代,直到代码路径到达break 语句。

    【讨论】:

    • 只是好奇:为什么要教初学者使用 break,而 break 应该很少使用,而且从来没有必要?
    • @BenKnoble 我不同意您对break 有用性的评估:尽管它可以像大多数语言结构一样被滥用,但它也有助于在几个重要情况下提高清晰度。从循环体的中间结束循环,这对所有命令式语言都很常见,就是这样一种情况。它是如此基础,以至于某些语言(例如 Ada)具有循环构造,需要使用类似 break 的语句(Ada 中的exit 语句)。
    • 有趣。对我来说,在中间结束循环体意味着返回语句,这反过来表明循环是方法的主体,尽管可能需要几行来设置一些变量。然而,你的观点很有启发性。
    【解决方案2】:

    您需要为此使用loop。代码应该是这样的:

    import java.util.Scanner;
    import java.util.Random;
    
    public class Test {
        public static void main(String[] args) {
            Scanner input = new Scanner(System.in);
            Random rand = new Random();
    
            int random = rand.nextInt(10) + 1;
    
            System.out.print("Pick a number 1-10: ");
            int number = input.nextInt();
    
            boolean found = false;
            while (!found) {
               if (number == random) {
                    System.out.println("Good!");
                   found = true;
                } else if (number > random) {
                    System.out.println("Too Big, try again:");
                    number = input.nextInt();
                } else if (number < random) {
                    System.out.println("Too Small, try again:");
                    number = input.nextInt();
                }
            }
        }
    }
    

    【讨论】:

      【解决方案3】:

      您可以使用do...while

      Random rand = new Random();
      int random = rand.nextInt(10) + 1;
      do {
        Scanner input = new Scanner(System.in);
      
        System.out.print("Pick a number 1-10: ");
        int number = input.nextInt();
      
        if (number == random) {
          System.out.println("Good!");
        } else if (number > random) {
          System.out.println("Too Big");
        } else if (number < random) {
          System.out.println("Too Small");
        }
      
      } while ( number != random );
      

      【讨论】:

      • number 是在循环内部定义的,这意味着如果您在条件语句的循环外部使用它,则超出范围。
      • @brandaemon。不,不会,随机数是在循环之前生成的。您的观点关于范围是有效的,变量的初始化可以放在外面,如果需要的话可以在里面赋值。
      • 好的。在循环内定义 int 时出现编译错误。
      【解决方案4】:

      有几种技术可以循环您的请求,其中包括:

      • while (&lt;condition&gt;) { &lt;do something&gt; }

      • do { &lt;something&gt; } while (&lt;condition&gt;);

      • for (&lt;init statement&gt;, &lt;condition&gt;, &lt;update statement&gt;) { &lt;do something&gt; }

      为了炫耀,您可以通过使用递归来避免使用上述显式循环构造之一:

      mport java.util.Scanner;
      import java.util.Random;
      
      public class Test {
      
          public static void ask(int random) {
              Scanner input = new Scanner(System.in);
              System.out.print("Pick a number 1-10: ");
              int number = input.nextInt();
      
              if (number == random) {
                  System.out.println("Good!");
              } else if (number > random) {
                  System.out.println("Too Big");
                  ask(random);
              } else if (number < random) {
                  System.out.println("Too Small");
                  ask(random);
              }
          }
      
      
          public static void main(String[] args) {
              Random rand = new Random();
      
              int random = rand.nextInt(10) + 1;
              ask(random);
          }
      }
      

      这里ask() 方法不断调用自己,直到达到结束条件(用户猜对了)。

      根据 Java 虚拟机的聪明程度,这可能会对调用堆栈造成压力,也可能不会。

      【讨论】:

        【解决方案5】:

        将 if 语句括在一个 do-while 循环中,当用户没有猜到数字时,它将循环:

         int number;
         do {
            System.out.print("Pick a number 1-10: ");
            number = input.nextInt();
        
            if (number == random) {
                System.out.println("Good!");
            } else if (number > random) {
                System.out.println("Too Big");
            } else if (number < random) {
                System.out.println("Too Small");
            }
         } while (number != random);
        

        【讨论】:

        • 请注意,number 在此示例中超出范围,会导致编译错误。
        【解决方案6】:

        为了有条件地重复代码,请使用循环。

        // this code will execute only once
        System.out.print("Pick a number 1-10: ");
        // initialize number to a value that would not be used and not equal random
        int number = -1;
        
        // the code inside the curly braces will repeat until number == random
        while (number != random) {
            // get next number
            number = input.nextInt();
            // handle case one
            if(number > random) System.out.println("Too Big");
            // handle case two
            if(number < random) System.out.println("Too Small");
        }
        // once number == random, the condition is false so we break out of the loop
        System.out.println("Good!");
        

        【讨论】:

          【解决方案7】:

          您正在寻找的是编程语言中允许您一次又一次地做特定事情的结构。

          这是使用循环完成的。 例如,检查docs for the while loop。这就是你需要的。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-08-20
            • 1970-01-01
            • 2023-04-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-02-06
            相关资源
            最近更新 更多