如何检查用户输入是否是某个基数?

时间:2017-04-25 23:10:02

标签: java java.util.scanner user-input

我正在研究一种有4种模式的计算器程序 二进制(基数2),八进制(基数8),十进制(基数10)和十六进制(基数16)。

我想知道如何检查输入的用户输入是否与当前模式匹配。例如,如果计算器设置为八进制模式,如何检查用户输入的是否在基数8中?或者,如果它是十六进制模式,如何检查它是否是16的基数?

程序以十进制模式启动并显示此菜单。

val res = splits.map { 
  case Array(col1, col2, col3) => // Convert to doubles, put in to Feature/Point Structure}
  case _ => // Handle the case where your csv is malformatted
}

用户可以更改模式或输入当前模式的值。

4 个答案:

答案 0 :(得分:1)

对于八进制,通常八进制数用前面的零表示,例如012.十六进制数通常以0x开头,例如0xFF。

您可以将用户的输入读作字符串,然后查看前几个字符以查看数字是以0开头(但不仅仅是0)还是以“0x”开头。

你必须用二进制做一些不同的事情,因为你无法确定1001是二进制还是十进制。

答案 1 :(得分:1)

通常,有两种方法可以处理用户输入:1)限制用户可以提供的输入或2)验证输入并在输入无效时显示错误消息。对于这个特定的程序,我建议以下任何一个:

  1. 如果这是一个带有每个数字按钮的GUI程序(比如在物理计算器上),您只需在用户选择模式后立即更改可用按钮。例如,当用户选择八进制模式时,仅提供数字0到8的按钮。这会自动禁止用户键入9或任何字母。

  2. 如果程序是基于文本的,或者您允许用户从键盘输入数字,则需要解析输入。一种方法是使用Integer.parseInt()。此功能的一个版本允许您指定基数,该基数将由用户选择的模式确定。当输入字符串包含无效字符时,它将抛出异常。您可以捕获异常并显示相应的错误消息。

答案 2 :(得分:0)

某个数字可以匹配多个基数,因此您无法确定输入数字的基数。如果用户以已建立的格式输入数字,您可以使用@ Apitosu的答案来检查其基数。

如果您只是想检查输入的数字是否对某个基数有效,您可以使用Long.parseLong的重载,它接收一个基数作为第二个参数,并且会引发一个如果所选基数的数字无效,则出现异常。

Source.

答案 3 :(得分:0)

我建议你取数字并将其转换为字符串(可能没有选择十六进制值),然后通过正则表达式运行它们以查看它是否通过。类似的东西:

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

我确信这些可以改进。注意,有些情况下数字会匹配多个表达式。