当前位置: 首页 > 知识库问答 >
问题:

检查带有数字的数学方程式是否只有一位数字

梁祯
2023-03-14

我正在制作一个类似游戏24的程序。

我需要检查用户的输入(一个使用程序提供的四个随机数的数学方程),看看用户给出的数字是否只有一个数字。

例如:

程序吐出6 4 9 5

用户可以输入9 5 6 4(等于24)。

但是我不希望他们能够做任何像95-64这样的事情(不对,只是一个例子)来制造24。

我如何检查等式中的数字是否只有一位数?

/***接受用户的数学问题。*然后...*确保输入的数学问题遵循规则并等于24。*规则:必须至少有一个乘法、除法、加法或减法符号。*输入的数字只有一个数字。*问题等于24。*@参数无*@返回真或假*如果问题遵循规则并等于24-真(玩家获胜)*如果问题不遵循规则并等于24-假(玩家失败)*如果问题不遵循规则并不等于24-假(玩家失败)*
*/public val math的问题(){扫描仪扫描=新的扫描仪(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;    
        }
    }        
}

共有3个答案

许俊风
2023-03-14

找出一个数字要做多少位的简单方法:

(int)数学。日志10(x)1

您也可以检查输入的数字是否大于9。

阎雪峰
2023-03-14

试试吧

  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; 
 }
益何平
2023-03-14

检查输入的一种方法是使用正则表达式。例如:

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
}
 类似资料:
  • 问题内容: 我正在尝试查看int是否具有相同数字的倍数。尝试不使用字符串方法或数组。我遇到的主要方法是。当重复数字位于末尾时有效,但当它们位于开始或中间时无效。 } 如果运行此命令,您将看到‘2’重复出现,但该方法仍会评估其应为的时间。 问题答案: 这是一个简短而甜蜜的版本:) 它的工作方式非常简单。是一个整数,用于存储已经遇到的数字(由于十进制系统编号只有10位,而整数给出16位,因此我们有足够

  • 本文向大家介绍PHP程序检查数字的所有数字是否都除以它,包括了PHP程序检查数字的所有数字是否都除以它的使用技巧和注意事项,需要的朋友参考一下 要检查数字的所有数字是否在PHP中将其除,代码如下- 示例 输出结果 定义了一个名为“ divisibility_check”的函数,该函数检查数字是否不为0,以及数字是否完全除以数字的每个数字,而没有剩余任何值。定义了另一个名为“ divide_digi

  • 我知道Sieve的算法,直到现在我一直在用它来得到高达10亿的素数。 但现在我需要知道一个10位数是素数还是不是素数,而Sieve的算法无法在时间限制内计算出来。 我搜索了很多,找到了费马的素数检验,但它没有成功,因为有些部分我不能理解,而有些部分告诉我,它只是通过一些迭代来判断它是不是可能的素数。 我想知道,在1秒左右的时间内,如何测试一个这么大的数是否为素数?最有效的解决方案/算法是什么? 编

  • 我需要检查字符串中是否只有数字,以便将其解析为int。我不允许使用try/catch语句。thusfar,我在这里尝试过的一切都没有奏效,这就是为什么我可能已经被问到了这个问题。以下是我正在尝试的: 它是从一个文件中读取的,如果第一个输入不是整数,那么下一个输入就是整数,但是当运行时,由于某种原因,我在else语句中得到了一个不匹配的结果。

  • 嗨,我正在尝试解决Udemy练习:编写一个名为hasSharedDigit的方法,其中包含int类型的两个参数。 每个数字应在10(含)-99(含)之间。如果其中一个数字不在范围内,则该方法应返回false。 如果两个数字中都有数字,例如12和23中的2,则该方法应返回true;否则,该方法应返回false。 我一直在得到真实,而有共享数字(9,99)我无法发现为什么.. }

  • 首先,我是新来的。我需要问一个问题。 我想只取数字,但如果我这样写: ABC-DC-SMND“计数有效”,我如何解决这个问题? 谢谢你的关心。