【问题标题】:Why is my java while loop continue printing with true status?为什么我的 java while 循环继续以真实状态打印?
【发布时间】:2020-03-29 08:16:56
【问题描述】:

下面我有一个数组,我正在检查用户输入,猜测我钱包中的卡类型?如果为真,则退出 while 循环,否则再次询问用户,直到与我的数组中的相同卡类型匹配。我的问题是当用户猜测正确时,我仍然收到“卡类型不正确重试消息”。有没有办法缩短我的代码或更好地纠正它?

public static void main(String[] args) {
    String correctGuess = validateGuessedCardType();
    System.out.println(correctGuess);
}

private static final String[] cardsTypesInWallet = {
    "DBS",
    "POSB",
    "AMEX",
    "Standard Charted"
};

private static String validateGuessedCardType() {
    boolean correctGuess = false;

    String guessedCard = "";
    while (!correctGuess) {
        in = new Scanner(System.in);
        System.out.println("Guess a card in my wallet");
        guessedCard = in.nextLine();

        for (int i = 0; i < cardsTypesInWallet.length; i++) {
            if (cardsTypesInWallet[i].equals(guessedCard)) {
                correctGuess = true;
            }
        }
        System.out.println("Card Type is incorrect");
        System.out.println("try again");
    }
    return guessedCard;
}

【问题讨论】:

  • java 中的while 循环评估块中的所有代码,然后检查条件。如果您想在某些代码之后立即中断循环,请添加if (!correctGuess) {break;}

标签: java arrays while-loop boolean


【解决方案1】:

因为循环没有终止,所以一直持续到结束。如果匹配,您可以从for 循环返回值

private static String validateGuessedCardType() {

    String guessedCard = "";
    while (true) {
        in = new Scanner(System.in);
        System.out.println("Guess a card in my wallet");
        guessedCard = in.nextLine();

        for (int i = 0; i < cardsTypesInWallet.length; i++) {
            if (cardsTypesInWallet[i].equals(guessedCard)) {
                return guessedCard;
            }
        }

        System.out.println("Card Type is incorrect");
        System.out.println("try again");
    }
}

【讨论】:

    【解决方案2】:

    因为您没有将那些 System.out 行放在适当的 if 子句中。

    请注意,您正在运行 for 循环,但实际上并不确定循环需要运行的迭代次数 - 因为定义是“继续遍历所有循环,除非其中一个是正确的。如果一个是正确的,请停止”。

    这将是进行这两个修复的结果代码。

    还请记住,不建议使用中断操作数,因为它违反结构化编程范式推理 - 它会“破坏”结构。因此,即使它可以用来改进你的代码,我建议你改为遵循这个建议。

    private static String validateGuessedCardType() {
            boolean correctGuess = false;
    
            String guessedCard = "";
            while (!correctGuess) {
                in = new Scanner(System.in);
                System.out.println("Guess a card in my wallet");
                guessedCard = in.nextLine();
    
                int i=0;
                while(i < cardsTypesInWallet.length && !correctGuess) {
                    if (cardsTypesInWallet[i].equals(guessedCard)) {
                        correctGuess = true;
                    }
                    else i++;
                }
                if(!correctGuess){
                    System.out.println("Card Type is incorrect"); System.out.println("try again");
                }
            }
            return guessedCard;
        }
    

    【讨论】:

      【解决方案3】:

      试试这个

          public class Test1 {
          static Scanner in = new Scanner(System.in);
          public static void main(String[] args) {
              String correctGuess = validateGuessedCardType();
              System.out.println(correctGuess);
          }
      
          private static final String[] cardsTypesInWallet = {
                  "DBS",
                  "POSB",
                  "AMEX",
                  "Standard Charted"
          };
      
          private static String validateGuessedCardType() {
              boolean correctGuess = false;
              String guessedCard = "";
              while (!correctGuess) {
      
                  System.out.println("Guess a card in my wallet");
                  guessedCard = in.nextLine();
      
                  for (int i = 0; i < cardsTypesInWallet.length; i++) {
                      if (cardsTypesInWallet[i].equals(guessedCard)) {
                          correctGuess = true;
                      }
                  }
                  if(correctGuess) {
                      System.out.println("Card Type is correct");
                  } else {
                      System.out.println("Card Type is incorrect");
                      System.out.println("try again");
                  }
              }
              return guessedCard;
          }
      }
      

      【讨论】:

        【解决方案4】:
            private static String validateGuessedCardType() {
                boolean correctGuess = false;
        
                String guessedCard = "";
                outer:
                while (!correctGuess) {
                    in = new Scanner(System.in);
                    System.out.println("Guess a card in my wallet");
                    guessedCard = in.nextLine();
        
                    for (int i = 0; i < cardsTypesInWallet.length; i++) {
                        if (cardsTypesInWallet[i].equals(guessedCard)) {
                            break outer;
                        }
                    }
                    System.out.println("Card Type is incorrect");
                    System.out.println("try again");
                }
                return guessedCard;
            }
        
        
        OR
        
            private static final List<String> cardsTypesInWallet = Arrays.asList{
              "DBS",
              "POSB",
              "AMEX",
              "Standard Charted"
          };
        
            private static String validateGuessedCardType() {
              boolean correctGuess = false;
        
              String guessedCard = "";
              while (!correctGuess) {
                  in = new Scanner(System.in);
                  System.out.println("Guess a card in my wallet");
                  guessedCard = in.nextLine();
        
                  if (cardsTypesInWallet.contains(guessedCard){
          correctGuess = true;
         }
            else {
           System.out.println("Card Type is incorrect");
                  System.out.println("try again");
        }
        
              }
              return guessedCard;
          }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-05
          • 2014-03-11
          • 2017-05-05
          • 2021-04-09
          • 2019-06-08
          • 1970-01-01
          相关资源
          最近更新 更多