2016-06-28 89 views
0

我必須創建一個程序來計算三角形的斜邊。它只能使用數字,如果給定的輸入不是數字,那麼它應該拋出異常。我能夠做到這一點,但是我希望用戶不能輸入0,因爲0的三角形的一邊沒有三角形。我試過如果陳述,但我不認爲我正確使用它們。請幫忙!如何在使用程序時不讓用戶使用0?

import java.util.InputMismatchException; 
import java.util.Scanner; 

public class handleexceptions1{ 
    public static void main(String[] args) { 

     boolean repeat = true; 
     double _sideA = 0; 
     while (repeat) { 
      try { 
       Scanner input = new Scanner(System.in); 
       System.out.println("Please enter side A: "); 
       _sideA = input.nextDouble(); 

       repeat = false; 
      } catch (InputMismatchException e) { 
       System.out.println("Error! Please enter a valid number!"); 
      } 
     } 
     boolean repeat2= true; 
     double _sideB = 0; 
     while (repeat2){ 
      try { 
       Scanner input = new Scanner(System.in); 
       System.out.println("Please enter side B: "); 
       _sideB = input.nextDouble(); 
       repeat2= false; 
      } catch (InputMismatchException e) { 
       System.out.println("Error! Please enter a valid number!"); 
      } 
     } 
     double hyptonuse = Math.sqrt((_sideA*_sideA) + (_sideB*_sideB)); 
     System.out.println("Side C(the hyptonuse) is: "+ hyptonuse); 
    } 
} 
+2

我在代碼中沒有看到「if」語句。 – melpomene

+0

你可以在你的try/catch中檢查你的變量是否大於0,然後拋出一個新的異常,如果它是0.然後你可以添加一個新的catch來處理異常。 – user1408767

回答

0

裏面你嘗試{}範圍檢查,如果你的號碼是大於0。如果是,重複=假:

try { 
    Scanner input = new Scanner(System.in); 
    System.out.println("Please enter side A: "); 
    _sideA = input.nextDouble(); 
    if (_sideA > 0){ 
     repeat = false; 
    } 
} 
0

你可以把這個,而不是線「重複=假」:

if(_sideA == 0){ 
repeat = true; 
} else { 
repeat = false; 
} 

對每個while循環都這樣做。

+0

或'repeat =(_sideA == 0);'。或者'while(_sideA == 0){'。 – shmosel

0

我建議

_sideA = input.nextDouble(); 

_sideA = parseValue(); 

和移動

Scanner input = new Scanner(System.in); 

一個新的輔助函數裏面替換,parseValue()像這樣:

private double parseValue() throws InputMismatchException 
{ 
    Scanner input = new Scanner(System.in); 
    double retVal = input.nextDouble(); 
    if (retVal <= 0) 
    { 
     throw InputMismatchException; 
    } 

    return retVal; 
} 

您可能想要使用其他一些Exception類型,在這種情況下,您還需要確保捕獲該類型。同樣,確保更新sideB以使用新功能。

相關問題