2017-04-25 133 views
2

我正在研究一個有4種模式的計算器程序。
二進制(基2),八進制(基8),十進制(基10)和十六進制(基16)。如何檢查用戶輸入是否是某個基地?

我想知道如何檢查輸入的用戶輸入是否與當前模式匹配。例如,如果計算器設置爲八進制模式,我該如何檢查用戶輸入的內容是否在8位?或者如果它是在十六進制模式下如何檢查它是否爲16位?

程序以十進制模式啓動並顯示此菜單。

private static String displayMenu(String mode) { 
    @SuppressWarnings("resource") 
    Scanner input = new Scanner(System.in); 
    System.out.println(mode + " mode\n"); 
    System.out.println("Bin - Binary    +"); 
    System.out.println("Oct - Octal    -"); 
    System.out.println("Dcm - Decimal    *"); 
    System.out.println("Hex - Hexadecimal   /"); 
    System.out.println("Q - Quit     ="); 
    System.out.print("Option or value: "); 
    String option = input.nextLine(); 
    option.toUpperCase(); 
    return option; 
} 

用戶可以更改模式或輸入當前模式的值。

+0

這是一個命令行或GUI程序? –

+0

這是一個命令行程序。 –

+0

用戶將如何指定「模式」? –

回答

1

一般而言,有兩種方法來處理用戶輸入:1)限制哪些用戶被允許提供作爲輸入或2)驗證輸入,並且當輸入是無效的顯示錯誤消息。對於這個特殊的程序,我建議以下任一操作:

  1. 如果這是對每個數字鍵(像物理計算器)的GUI程序,你可以儘快改變現有的按鈕作爲用戶選擇模式。例如,當用戶選擇八進制模式時,只提供數字0到8的按鈕。這會自動禁止用戶輸入9或任何字母。

  2. 如果程序是基於文本的,或者您允許用戶從鍵盤輸入數字,則需要解析輸入。一種方法是使用Integer.parseInt()。該功能的一個版本允許您指定基地,這將由用戶選擇的模式決定。當輸入字符串包含無效字符時,它將引發異常。您可以捕獲異常並顯示相應的錯誤消息。

1

對於八進制,通常八進制數用前一個零表示,例如012.十六進制數通常以0x開頭,例如0xFF。

您可以在用戶輸入中讀取字符串,然後查看前幾個字符以查看數字是否以0開始(但不僅是0)或以「0x」開頭。

你必須用二進制來做一些不同的事情,因爲你不能確定1001是二進制還是十進制。

+2

Java有一個二進制文字:0b –

0

某個號碼可以匹配很多鹼基,因此您無法確切知道該號碼已輸入的基數。如果用戶以建立的格式輸入號碼,則可以使用@ Apitosu的答案來檢查其基數。

如果你只是想檢查,如果輸入的號碼有效期爲某基地,您可以使用Long.parseLong的過載,其接收基數作爲第二個參數,如果該號碼是無效將引發異常選擇的基數。

Source.

0

我建議你把數字轉換成字符串(可能沒有選擇的十六進制值),然後通過正則表達式運行它們來查看它是否通過。例如:

[0-1]+ //Binary 
[0-7]+ //Octal 
[0-9]+ //Decimal 
[0-9A-F]+ //Hexadecimal 

我確定這些可以改進。請注意,有些情況下數字將與多個表達式匹配。

+0

請注意,OP正在驗證輸入,根據定義它已經是一個字符串。 –

+0

這隻適用於只打算使用4個鹼基的情況。如果你必須使用除了那些4之外的任何其他基礎,那麼它將不起作用。 – TheRealChx101

相關問題