2015-12-03 18 views
0

我記得在Python中有這個確切的問題。這個Java代碼是我的Python代碼的一個副本,用於計算三角形的面積。如果輸入一個非數字值,我會發現一個異常,但最終的結果會被打亂。Java中的異常後重新提示

private static float baseLength() { 
    float baseLength = 0; 
    Scanner user_input = new Scanner(System.in); 
    try { 
     while (baseLength <= 0) { 
      System.out.print("Enter the base length of the triangle: "); 
      baseLength = user_input.nextFloat(); 
      if (baseLength <=0) { 
       System.out.println("Error. Plase enter a number higher than 0."); 
      } 
     }    
    } catch (InputMismatchException badChar) { 
     System.err.println("You have entered a bad value. Please try again"); 
     baseLength(); 
    } 
    return baseLength; 

它將從錯誤的數字中恢復,但不是從不是數字的值中恢復。我仍然無法弄清楚確切的問題是什麼。

+0

你可能想'返回baseLength()'而不是隻調用它。 – SomeJavaGuy

+0

這裏有什麼問題?我測試了它。它似乎工作正常。這裏的預期行爲是什麼? –

+0

當用戶輸入數字0或以下時,會再次提示他們。但是,例如,如果用戶輸入'狗',它仍然會提示他們,但返回值不是您認爲的數字。 – user2226042

回答

0

與System.err的

private static float baseLength() { 
    float baseLength = 0; 

    while (true) 
    { 
    try { 
     System.out.print("Enter the base length of the triangle: "); 

     Scanner user_input = new Scanner(System.in); 
     baseLength = user_input.nextFloat(); 

     if (baseLength>0) 
      return baseLength; 

     if (baseLength <=0) 
       System.err.println("Error. Plase enter a number higher than 0."); 
     } 
     catch (InputMismatchException badChar) 
     { 
     System.err.println("You have entered a bad value. Please try again"); 
     } 
    } 
} 
測試更加清晰,和主迴路內的異常,和每一個錯誤
+0

我用這段代碼運行了多個測試,它的工作原理!所以我的代碼的問題是我只需要將其分成多個語句,以確保它單獨捕獲所有場景。我將來會記住這一點。謝謝。 – user2226042

1

你可以把while環周圍的try/catch塊來實現這一目標:

private static float baseLength() { 
    float baseLength = 0; 
    Scanner user_input = new Scanner(System.in); 
    while (baseLength <= 0) { 
     try { 
      System.out.print("Enter the base length of the triangle: "); 
      baseLength = user_input.nextFloat(); 
      if (baseLength <= 0) { 
       System.out.println("Error. Plase enter a number higher than 0."); 
      } 
     } catch (InputMismatchException badChar) { 
      System.err.println("You have entered a bad value. Please try again"); 
     } 
    } 
    return baseLength; 
} 
+0

我用這段代碼運行了一些測試。 'baseLength <= 0'可以正常工作,但如果我輸入'cow',它會遞歸地打印錯誤消息。 – user2226042

+0

這很奇怪,因爲我的代碼省略了你現在不必要的遞歸調用 –