2017-04-25 91 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

相关问题