【问题标题】:How to exit from a do while loop in Java?如何从 Java 中的 do while 循环中退出?
【发布时间】:2015-11-18 19:31:09
【问题描述】:

将号码输出为电话号码格式的简单程序 我似乎无法退出循环我不确定我做错了什么我想 !PhoneNumber.equals("999");当用户输入 999 但它不起作用时将退出循环。谁能帮我这是我的代码

import javax.swing.*;

public class PhoneNumberFormat 
{

    public static void main(String[] args) 
    {
      String PhoneNumber;
      int numLength= 10;

      do
      {

          PhoneNumber = JOptionPane.showInputDialog(null, 
                 "Enter your 10 digit phone number or enter 999 to quit");
          while(PhoneNumber.length() != numLength)
          {
              PhoneNumber = JOptionPane.showInputDialog(null,
                  "Error: You Entered " + PhoneNumber.length() + " digits\nPlease"
                      + " Enter a 10 digit Phone number");    
          }

            StringBuilder str = new StringBuilder (PhoneNumber);
            str.insert(0, '(');
            str.insert(4, ')');
            str.insert(5,' ');
            str.insert(9, '-');

        JOptionPane.showMessageDialog(null, "Your telephone number is " +str.toString());

      }while(!PhoneNumber.equals("999"));

    }
}

【问题讨论】:

  • 你调试过你的代码吗?在我看来,输入 999 将意味着代码永远不会退出 while 循环。
  • 如果您只是将对话框留空,则可能存在 NPE。
  • 我的理解是,在第一个声明中,您要求 999 退出。然后在下一个代码中,如果用户没有输入 >10 位数字,则您正在匹配。您还必须检查 if 用户是否输入了 3 位数字并且 3 位数字是 999,然后退出循环。我相信这是行得通的
  • @StackFlowed 同意潜在的 NPE,但只有在您按 CancelClose 输入对话框时才会抛出 NPE。如果在不提供输入的情况下按 OK,则它不会为 null,而是长度为 0 的字符串(空字符串)。

标签: java swing loops do-while


【解决方案1】:

如果你希望999存在的时候你需要添加一个if条件来监听它。

public static void main(String[] args) {
    String PhoneNumber;
    int numLength = 10;

    do {
        PhoneNumber = JOptionPane.showInputDialog(null,
                "Enter your 10 digit phone number or enter 999 to quit");

        // add this condition to exit the loop, as well protect against NPE
        if (PhoneNumber == null || PhoneNumber.equals("999")) {
            break;
        }

        while (PhoneNumber.length() != numLength) {
            PhoneNumber = JOptionPane.showInputDialog(null,
                    "Error: You Entered " + PhoneNumber.length()
                            + " digits\nPlease"
                            + " Enter a 10 digit Phone number");

            //protect against NPE
            if(PhoneNumber == null) 
               PhoneNumber = "";
        }

        StringBuilder str = new StringBuilder(PhoneNumber);
        str.insert(0, '(');
        str.insert(4, ')');
        str.insert(5, ' ');
        str.insert(9, '-');

        JOptionPane.showMessageDialog(null, "Your telephone number is "
                + str.toString());

    } while (!PhoneNumber.equals("999"));

}

【讨论】:

  • 他想要存在循环,它确实存在?还有其他问题吗?
  • @brso05 不会,因为他强制输入长度为 10 个字符。
  • @mibac 如果他将 if 放在强制使用 10 位数字的 while loop 之前会怎样?
  • @mibac 根据他的问题/规范,这实际上是更正确的答案......
【解决方案2】:

您将数字强制为 10 位,那么您期望什么?它永远不会等于三位数的“999”。

也许你打算这样做:

while(!PhoneNumber.startsWith("999"));

【讨论】:

  • @azurefrog 他实际上并没有修改PhoneNumber 变量本身
  • @JamesB 改一下do while 没问题你试过代码了吗?
  • @JamesB 这是许多正确答案之一。您不应该对正确答案投反对票。试试代码,看看它是否有效......
  • @JamesB 欢呼是为了恭维,搞砸了参考,cmets 来得如此之快也许这就是原因。
  • @Raf 没问题,很高兴在应得的地方给予赞扬。
【解决方案3】:

如果您想使用 999 作为退出的输入选项,请首先允许用户输入 999 作为有效输入。

  int numLength= 10;
  do
  {

      PhoneNumber = JOptionPane.showInputDialog(null, 
             "Enter your 10 digit phone number or enter 999 to quit");
      while(PhoneNumber.length() != numLength)
      {
          PhoneNumber = JOptionPane.showInputDialog(null,
              "Error: You Entered " + PhoneNumber.length() + " digits\nPlease"
                  + " Enter a 10 digit Phone number");    
      }

在这里,如果输入的长度不是 10,则您拒绝考虑输入。

【讨论】:

    【解决方案4】:

    修复潜在 NPE 并解决您的问题的代码应如下所示:

    import javax.swing.*;
    
    public class PhoneNumberFormat 
    {
    
        public static void main(String[] args) 
        {
          String PhoneNumber;
          int numLength= 10;
    
          do
          {
    
              PhoneNumber = JOptionPane.showInputDialog(null, 
                     "Enter your 10 digit phone number or enter 999 to quit");
              while(PhoneNumber!=null && PhoneNumber.length() != numLength)
              {
                  PhoneNumber = JOptionPane.showInputDialog(null,
                      "Error: You Entered " + PhoneNumber.length() + " digits\nPlease"
                          + " Enter a 10 digit Phone number");    
              }
    
                StringBuilder str = new StringBuilder (PhoneNumber);
                str.insert(0, '(');
                str.insert(4, ')');
                str.insert(5,' ');
                str.insert(9, '-');
    
            JOptionPane.showMessageDialog(null, "Your telephone number is " +str.toString());
    
          } while(!PhoneNumber.substring(0,3).equals("999"));
    
        }
    }
    

    修复上线

    while(PhoneNumber!=null && PhoneNumber.length() != numLength)
    

    while(!PhoneNumber.substring(0,3).equals("999"));
    

    【讨论】:

      猜你喜欢
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 2015-01-18
      • 1970-01-01
      • 1970-01-01
      • 2011-12-18
      • 2016-12-19
      • 1970-01-01
      相关资源
      最近更新 更多