2016-03-03 87 views
0

嘿,大家我正在用java(我目前還在學習語言)的個人項目工作,並帶着一個或兩個問題來到這裏。掃描儀不按預期工作

首先問

在我try塊允許我要求用戶輸入一個值賦給一個變量,並且在我的catch塊,如果用戶輸入一個錯誤的值或跳過該條目,它拋出異常並通知用戶已設置了默認值。這是做到這一點的正確方法是?

代碼示例

(注:我有很多這樣的嘗試工作方式與方法中下面的一個相同/ catch語句)

try { 
     System.out.print("Please enter a value for price of computer: "); 
     price = sc.nextFloat(); 

    } catch (InputMismatchException ex) { //Catch skip or error 
     System.out.println("You entered an invalid value for price, it is assumed to be 0."); 
     price = 0F; //Assign a default value 
    } 

第二個問題

當我編譯並執行它,它不允許我輸入變量,而是跳到異常。我不確定我錯過了什麼,所以我會喜歡任何建議,並再次感謝一個偉大的社區。

+0

您是否清除了掃描儀緩衝區? – Paul

+0

我以爲你不能明確地清除掃描儀的緩衝區。我在內部讀過某處,它可能會在讀取令牌後清除緩衝區,但這是程序員觸及範圍之外的實現細節。 – CoderC

+0

要清除它,只需在將掃描儀用於其他數據類型之前調用nextLine()方法;例如,如果您使用nextLine()方法,然後想要使用nextFloat()方法,則必須創建一個新對象,或者您必須在nextFloat()方法之前再次使用nextLine()方法 – Paul

回答

0

此代碼看起來大部分是正確的。雖然,我假設您的sc變量是通過多個輸入(如您陳述的)相同的掃描器對象,所以其緩衝區可能不會像您在每次使用sc.nextFloat()方法時所假定的那樣被清除。

您可以通過重新初始化掃描儀對象,然後再次使用它來避免這種情況。如果我沒有記錯,沒有辦法清楚地清除掃描儀對象的緩衝區,所以它必須重新初始化以「清除」它。您可以使用sc.hasNextFloat()驗證是否已輸入浮點值。

您也可以使用和Float.parseFloat(sc.nextLine())在輸入新行之前捕獲整個輸入。

0

工作代碼:

import java.util.*; 

public class InputTest{ 
    public static void main(String args[]) { 
     float price = -1F; 
     try { 
      Scanner sc = new Scanner(System.in); 
      System.out.println("Please enter a value for price of computer: "); 
      if (sc.hasNextFloat()){ 
       price = sc.nextFloat(); 
      } 
     } catch (InputMismatchException ex) { //Catch skip or error 
      System.out.println("You entered an invalid value for price, it is assumed to be 0."); 
      price = 0F; //Assign a default value 
     }catch(Exception err){ 
      err.printStackTrace(); 
     } 
     System.out.println("price:"+price); 

    } 
} 

輸出:

我已經指派值浮動變量之前添加sc.hasNextFloat():從您的代碼段

D:\Study\Java>java InputTest 
Please enter a value for price of computer: 
1 
price:1.0 

D:\Study\Java>java InputTest 
Please enter a value for price of computer: 
2 
price:2.0 

D:\Study\Java>java InputTest 
Please enter a value for price of computer: 
3.3 
price:3.3 

變化。當您從控制檯讀取數值時,請勿在輸入值中輸入f或F.爲了更好的理解,我提供了示例輸入值。

0

好吧,我發現我的錯誤感謝大家的幫助在這裏在stackoverflow。

當我初始化我的掃描儀可變我做了這樣的:掃描儀SC =新的掃描儀(「System.in」)

這意味着我想它讀取用戶這樣一個字符串,而不是輸入會自動拋出我的異常。

要解決此問題,我刪除了引號,現在它正常工作!

再次感謝大家!