我正在制作类似于游戏的程序24。
我需要检查用户的输入(使用程序提供的四个随机数的数学等式),以查看用户给出的数字是否只有一位数。
例如:
该程序吐出6 4 9 5
用户可以输入9 + 5 + 6 + 4(等于24)。
但我不希望他们做任何像95 - 64(不对,只是一个例子)做24的事情。
我如何检查等式中的数字是否只有一位数?
/ **
*接受用户的数学问题。
* 然后...
*确保输入的数学问题遵循规则并等于24。
*规则:必须至少有一个乘法,除法,加法或减法的符号。
*输入的数字只有一位数。
*问题等于24。
* @param无
* @return true或false
*如果问题遵循规则并且等于24 - 真(玩家获胜)
*如果问题不符合规则并且等于24 - 假(玩家输了)
*如果问题不遵守规则且不等于24 - 假(玩家输了)
*
* /
public void mathProblem()
{
扫描仪扫描=新扫描仪(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)) {
...
}
该表达式只允许一位数字并自动忽略空格并检查有效运算符(避免所有包含的语句)。 更好的是,您可以将捕获组添加到表达式中,以自动从输入中获取数字和运算符。
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
}
谢谢! 这非常有效。
找出一个数字要做的位数的简单方法:
(int) Math.log10(x) + 1
您也可以检查输入的数字是否大于9。
用户输入的响应(数学问题)将被视为字符串。 虽然正确,但这适用于双重响应。 我宁愿不经历来回转换的麻烦
尝试
if (("" + input).length() > 1) {
// say something about length
}
else {
// all ok
}
或者如果它已经是一个int测试,它在0到9之间
由于输入似乎是一个字符串,显示整个方程
String input ="9 + 5 + 6 + 4";
String el [] = input.split ("");
boolean foundSymbol = false;
for (String e : el) {
assert (e.length() == 1);
if (e.equals ("+") || e.equals ("-")) //etc
foundSymbol = true;
}
我认为输入类似于"9 - 4 * 2"。 OP希望检查它不包括任何2位数字。
这就是我想要的,保罗:)
更新了这些额外信息