2015-11-18 40 views
0

簡單的程序將數字輸出到電話號碼格式 我似乎不能退出循環我不知道我在做什麼錯我認爲 !PhoneNumber.equals(「999」);當用戶輸入999但不起作用時將退出循環。任何人都可以幫助我這裏是我的代碼如何退出Java中的do while循環?

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")); 

    } 
} 
+0

你調試了你的代碼嗎?在我看來,輸入999將意味着代碼永遠不會退出while循環。 – JamesB

+1

如果您剛剛將對話框留空,則存在潛在的NPE。 – StackFlowed

+0

我的理解是在第一個陳述中你要求999退出。然後在下一個代碼中,如果用戶沒有輸入> 10個數字,則匹配。您還必須檢查if用戶是否輸入了3位數字,並且3位數字是999,然後退出循環。我相信這就是工作 – mubeen

回答

4

你迫使數字是10位數,所以你期望什麼?它不會等於三位數的「999」。

也許你的意思做:

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

@azurefrog他並沒有修改'PhoneNumber'變量本身 – Mibac

+0

@JamesB可以在代碼中改變'do while'的方法嗎? – brso05

+2

@JamesB這是很多人的正確答案。你不應該低估正確的答案。嘗試代碼,看看它是否工作... – brso05

5

如果您希望在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")); 

} 
+0

這不會解決問題 – Mibac

+0

他想要存在循環,它呢?還有其他問題嗎? – Raf

+0

@mibac是的,它確實解決了他的問題,如果他把它放在正確的位置... – brso05

2

如果您想使用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

2

代碼與電位固定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"));