【问题标题】:How do I loop until the user makes correct input on Java?如何循环直到用户在 Java 上进行正确输入?
【发布时间】:2017-01-24 06:37:43
【问题描述】:
import java.util.Scanner;

public class SecretWord {
  public static void main( String[] args ) {

    Scanner input = new Scanner(System.in);
    String secret = "Please", guess;

    System.out.print( "Secret word?" );
    guess = input.next();

    for (int i = 0; guess.equals(secret); i++) {
      if( guess.equals(secret) ) {
        System.out.println("enter");
      } else {
        System.out.println( "try again" );
      }
    }
  }
}

我该如何做到这一点,当用户输入“请”以外的任何内容时,它会要求他/她再试一次?然后用户必须输入“Please”,结束循环,并打印“Enter”。

【问题讨论】:

    标签: java string loops for-loop


    【解决方案1】:

    这是鼓励使用“do-while”结构的经典示例之一(而且很少)。但是您似乎明确想要使用'for',因此以下是使用'for'的代码:

    import java.util.Scanner;
    
    public class SecretWord {
    public static void main( String[] args ) {
    
      Scanner input = new Scanner(System.in);
      String secret = "Please", guess = null ;
    
      for ( ; !secret.equals(guess);  ) {
          System.out.print( "Secret word?" );
          guess = input.next();
    
          if( guess.equals(secret) ) {
              System.out.println( "enter" );
          }
          else {
              System.out.println( "try again" ); {
          }
      }}}}
    

    我希望这有效。现在使用 'do-while' 来实现:

    import java.util.Scanner;
    public class ModifiedSecretWord {
      public static void main( String[] args ) {
    
          Scanner input = new Scanner(System.in);
          String secret = "Please", guess;
    
          do{
              System.out.print( "Secret word?" );
              guess = input.next();  
          }
          while( !guess.equals(secret) ) ;
    
          System.out.println("Shazam!!!");
    }}
    

    【讨论】:

    • 谢谢!我不知道 do_while 循环。这很有帮助。
    【解决方案2】:

    试试这个:

     import java.util.Scanner;
    
        public class SecretWord {
          public static void main( String[] args ) {
    
            Scanner input = new Scanner(System.in);
            String secret = "Please", guess;
    
            while(true){
                System.out.print( "Secret word?" );
                guess = input.next();
                if(guess.equals(secret)){
                    System.out.println("Enter");
                    break;
                }else{
                    System.out.println("Try Agian");
                }
            }
          }
        }
    

    【讨论】:

      【解决方案3】:

      改用while循环,

      while (!guess.equals(secret)) {
          if( guess.equals(secret) ) {
              System.out.println( "enter" );
          } else {
              System.out.println( "try again" ); {
              System.out.println("Secret word")
              guess = input.next();
          }
      }
      

      除此之外,for循环的语法如下,

      for (before, conditionsIsTrue, end)
      

      这意味着对你来说循环将是这样的,

      for(int i=0; if(guess.equals(secret)), i++)
      

      因为这个条件在第一个循环中永远不会成立,所以你根本就不会进入 for 循环。

      你也可以使用do-while,它使用后测,

      do {
          System.out.println("Secret word")
          guess = input.next();
          if( guess.equals(secret) ) {
              System.out.println( "enter" );
          } else {
              System.out.println( "try again" ); {
          }
      } while (!guess.equals(secret));
      

      【讨论】:

      • 一个有趣的练习也可以是随机选择一个文件中的一个单词,让用户尽可能少地猜测这个单词。这可能会迫使用户编写程序来优化它。从您的角度来看,这要求您在 java 中使用“从文件随机访问”。从文本中的某个地方挑选一个单词。随机访问在这里意味着您可以访问文件的任何部分,而无需从上到下浏览文件。这并不意味着随机选择一个单词。这可以通过生成随机数来完成。
      【解决方案4】:

      您必须将input.next() 移动到循环内部,我建议使用while 而不是for 循环:

      public static void main(String[] args) {
      
          Scanner input = new Scanner(System.in);
          String secret = "Please", guess = "";
      
          System.out.print("Secret word?");
      
          while (!guess.equals(secret)) {
              guess = input.next();
      
              if (guess.equals(secret)) {
                  System.out.println("enter");
              } else {
                  System.out.println("try again");
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2017-02-15
        • 2021-11-19
        • 2011-06-27
        • 1970-01-01
        • 1970-01-01
        • 2020-09-02
        • 2021-07-16
        • 2020-08-15
        相关资源
        最近更新 更多