Java 如何检查整数是否与给定的表达式“匹配”;5+;4n“是吗?”;?

Java 如何检查整数是否与给定的表达式“匹配”;5+;4n“是吗?”;?,java,Java,什么是确定给定整数是否与表达式结果匹配的有效方法5+4n。比方说,我有一个数字54,我想检查上面给出的表达式是否会导致这个数字。我能想到的一种方法是计算5+4n到54,并检查结果是否与感兴趣的数字匹配。但是,当我必须检查大数字时,这将是一种低效的方法。如果要计算表达式A+Bn,且A和B是可配置的,则应首先提取A和B: Pattern p = Pattern.compile("(\\-?\\d+)\\s*\\+([\\-\\+]?\\d+)\\s*n"); Matcher m = p.matche

什么是确定给定整数是否与表达式结果匹配的有效方法
5+4n
。比方说,我有一个数字
54
,我想检查上面给出的表达式是否会导致这个数字。我能想到的一种方法是计算
5+4n
54
,并检查结果是否与感兴趣的数字匹配。但是,当我必须检查大数字时,这将是一种低效的方法。

如果要计算表达式A+Bn,且A和B是可配置的,则应首先提取A和B:

Pattern p = Pattern.compile("(\\-?\\d+)\\s*\\+([\\-\\+]?\\d+)\\s*n");
Matcher m = p.matcher(expression);
if (m.matches()) {
   int A = Integer.valueOf(m.group(1));
   int B = Integer.valueOf(m.group(2));

   // Evaluate expression
   ...
}
然后只需检查
x
是否为解决方案:

// Evaluate expression
if ((x-A) % B == 0) {
    // Number is a solution 
} else {
    // Number is not a solution for the expression
}

如果我们假设x总是大于或等于0,
x=5+4n
可以重写为
x=1+4(n+1)
。 这意味着当x除以4时,将有1的余数。因此,您可以简单地执行以下操作:

private boolean doesMatch(x number) {
    return x%4==1;
}

返回n%4==1它必须是肯定的吗?表达式是静态的还是可以更改的?非常感谢。是的,检查的数字总是正数,表达式是静态的。@Neil它应该是0,而不是it@HRgiger它不仅仅是4的倍数,它是4加5的倍数,剩下1的余数。如果存在一个整数
x
,那么您将尝试测试该整数
n
,从而
x==(5+4*n)
。我写的只是RHS模4。这告诉我们它应该是
n%4==1
而不是
n%4==0