1

我正在研究带有数据验证的贷款计算器。我已经写了一切,一切顺利。我唯一不知道的是如何在询问用户“继续y/n?:”的地方编写一个while循环,然后让程序仅在用户键入y/Y时继续,程序仅在用户结束时结束类型 n/N,任何其他输入都应给出错误消息,例如“无效,您只能输入 Y 或 N”。因此,如果用户输入“x”,它应该会显示错误消息。

我尝试过 else if 子句,我也尝试过使用我在程序其余部分中使用的方法来验证数据,但我根本不知道如何验证字符串。我只能用原始数据类型来做到这一点。

这是我现在知道如何编写循环的唯一方法,问题是它只会以除 Y 之外的任何内容结束程序。

分配的一个选项是使用 JOptionPane 但我不知道如何将其合并到 while 循环中并让它显示一个是和一个否按钮。

    String choice = "y";

    while (choice.equalsIgnoreCase("y")) {

    // code here

    System.out.print("Continue? (y/n): ");
        choice = sc.next();
    }
   }
4

4 回答 4

1
while(true) {
    //Do something
    String choice;
    boolean validChoice = false;
    boolean breakLoop = false;
    while(!validChoice) {
        System.out.print("Stay in loop(Y/N)?");
        choice = sc.next();
        if(choice.equalsIgnoreCase("Y")) {
            validChoice = true;
        }
        if(choice.equalsIgnoreCase("N")) {
            validChoice = true;
            breakLoop = true;
        }
        if(!validChoice) {
            System.out.print("Error! Pick only Y/N");
        }
    }
    if(breakLoop) {
        break;
    }
    //Do something
}
于 2013-02-02T16:40:54.387 回答
0

关于什么

while(true) {
   // do something
   // get user input (Y or N)
   if(input.equals("Y") {
      continue;
   } else if(input.equals("N")) {
      break;
   } else {
       System.out.println("entered option not valid, please use Y or N");
   }
}
于 2013-02-02T16:39:29.133 回答
0

本质上,您需要两个循环:一个执行工作,另一个在内部提示用户验证。

boolean isContinuing = true;

while (isContinuing) {
    // do work

    boolean inputIsInvalid = true;
    while (inputIsInvalid) {
      System.out.print("Continue? (y/n): ");

      String choice = sc.next();

      if ("y".equalsIgnoreCase(choice)) {
          inputIsInvalid = false;
      }
      else if ("n".equalsIgnoreCase(choice)) {
          inputIsInvalid = false;
          isContinuing = false;
      }
      else {
          System.err.print("Error: Only valid answers are Y/N.");
      }
    }
}

节点:我使用布尔变量而不是break语句,它使代码更直接和可读。

于 2013-02-02T16:49:08.207 回答
0

我发现最好的方法是引入一种解释方法。

while (userWantsToContinue()) {
    // do another round
}

理想情况下,您甚至可以在作为 UI 抽象的接口上将此方法设为:

while (user.wantsToContinue()) {
    // do another round
}

将行为与 UI 实现分离。

于 2013-02-02T16:49:39.270 回答