2017-10-08 93 views
1

我正在創建要求2個數字然後將它們相加/相乘/除法的代碼。我設法讓這個工作,但我遇到了一個小問題。檢查輸入,看它是否在Java中是雙精度的

這是代碼多數民衆贊成竊聽我的一部分:

double number1 = 0; 
do { 
    try { 
     System.out.print("First number: "); 
     number1 = input.nextDouble(); 
    } catch (InputMismatchException e) { 
     System.out.print("This is not a number. "); 
    } 
    input.nextLine(); 
} while (number1 == 0); 

它工作正常的什麼,我打算這樣做,這是要求一個數字。如果用戶沒有輸入數字,它會捕獲異常並阻止它退出。

while (number1 == 0); 

這是我用來測試是否try和catch擔任預期,但當然意味着NUMBER1不能爲0,否則將不會停止,不斷地問了許多。

只要不輸入double,我希望它一直詢問輸入,我該如何替換?

因爲這是一個assigment,我必須不斷要求一個,如果它最好不使用該例外,那是可以接受的。但它必須指定一個號碼給number1,我可以稍後在程序中使用

回答

1

首先,這裏是如何修改代碼以使其工作 - 您可以添加一個boolean標誌來指示循環已成功:

double number1 = 0; 
boolean success; 
do { 
    success = true; 
    try { 
     System.out.print("First number: "); 
     number1 = input.nextDouble(); 
    } catch (InputMismatchException e) { 
     System.out.print("This is not a number. "); 
     success = false; 
    } 
    input.nextLine(); 
} while (!success); 

其次,應返工你的代碼,以避免通過調用hasNextDouble捕獲異常調用nextDouble前:

double number1 = 0; 
while(true) { 
    System.out.print("First number: "); 
    if (input.hasNextDouble()) { 
     number1 = input.nextDouble(); // This will not throw an exception 
     break; 
    } 
    System.out.print("This is not a number. "); 
    input.nextLine();   
} 
+0

謝謝!我在第一部分中添加了自己的代碼,並修復了我所遇到的明顯問題,但我不確定第二部分是如何工作的。我假設它最好不要捕捉異常呢? –

+0

@ DenzelSimson對於什麼是「更好」,沒有一個通用的答案,你可以根據具體情況來決定。當你詢問用戶的輸入時,你希望他們每時每刻都會輸入錯誤的內容,所以你不應該捕捉異常,而是主動檢查正確的輸入。當您以自動生成的固定格式讀取文件時,您不會指望數據不正確,並且您不能回過頭來告訴用戶給您一個不同的輸入,以便您捕獲異常,或讓他們通過終止程序。 – dasblinkenlight

0

您可以使用所提供的parseDouble功能由Double類,如果你可以捕捉異常。

,完成此

一個簡單的代碼段將是

public class AcceptDouble { 
    public static void main(String[] args) { 
     Scanner sc = new Scanner(System.in); 
     double number1 = 0; 

     while(true){ 
      try { 
       number1 = Double.parseDouble(sc.next()); 
       System.out.println("Got: " + number1); 
       // DO WHAT YOU WANT WITH NUMBER1 
      } 
      catch (NumberFormatException timeToBreak) { 
       System.out.println("Time to break"); 
       break; 
      } 
     } 
    } 
} 

這使接受新的輸入,只要輸入一個有效的數字。附上供參考的樣本輸出片段

34 
Got: 34.0 
23 
Got: 23.0 
12 
Got: 12.0 
end 
Time to break 
相關問題