我正在制作类似于游戏24的程序。
我需要检查用户的输入(使用程序提供的四个随机数的数学方程式),以查看用户给出的数字是否只有一位数字。
例如:
该程序吐出6 4 9 5
用户可以输入9 + 5 + 6 + 4(等于24)。
但是我不希望他们能够做95-64之类的事情(不正确,仅举一个例子)来达到24。
如何检查方程式中的数字是否只有一位?
/ ** *接受用户的数学问题。*然后... *确保输入的数学问题符合规则,等于24。*规则:必须至少具有一个乘法,除法,加法或减法符号。*输入的数字只有一位。*问题等于24。* @param none * @返回true或false *如果问题遵循规则且等于24-真(玩家获胜)*如果问题不遵循规则且等于24-false(玩家输掉)*如果问题不符合规则且不等于24-假(玩家输了)*
* / public void mathProblem(){扫描程序scan = new Scanner(System.in);
System.out.println("");
String response = scan.nextLine();
boolean done = false;
while (!done)
{
if (response.contains("*") || response.contains("/") || response.contains("+") || response.contains("-"))
{
//If statement to check and see if numbers in response ONLY have ONE number.
}
else if (!response.contains("*") || !response.contains("/") || !response.contains("+") || !response.contains("-"))
{
done = true;
}
}
}
检查输入的一种方法是使用正则表达式。例如:
if (!Pattern.matches("(\\s*\\d\\s*[+-*/]){3}+\\s*\\d", input)) {
...
}
该表达式仅允许一个数字,并自动忽略空格并检查有效的运算符(避免使用所有contains语句)。更好的是,您可以将捕获组添加到表达式中以自动从输入中获取数字和运算符。
Pattern pattern = Pattern.compile("\\s*(\\d)\\s*([+-*/])\\s*(\\d)\\s*([+-*/])\\s*(\\d)\\s*([+-*/])\\s*(\\d)");
Matcher matcher = pattern.matcher(input);
while (!matcher.matches()) {
// print error and accept new input
matcher = pattern.matcher(input);
}
int result = Integer.parseInt(matcher.group(1));
for (int g = 2; g <=6; g+= 2) {
switch (matcher.group(g)) {
case '*':
result *= Integer.parseInt(matcher.group(g + 1));
break;
case '+':
result += Integer.parseInt(matcher.group(g + 1));
break;
// and so on
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句