Java 负数的HCF
当我在程序中输入两个负数来查找某个数字的LCM和HCF时,HCF返回0。它适用于正数。这是HCF模块的代码。我能做些什么来修复它Java 负数的HCF,java,math,Java,Math,当我在程序中输入两个负数来查找某个数字的LCM和HCF时,HCF返回0。它适用于正数。这是HCF模块的代码。我能做些什么来修复它 static int hcf(int x, int y){ int hcf = 0; for (int i = x; i>=1; i--){ if (y%i==0 && x%i==0){ hcf = i; break; } } retu
static int hcf(int x, int y){
int hcf = 0;
for (int i = x; i>=1; i--){
if (y%i==0 && x%i==0){
hcf = i;
break;
}
}
return hcf;
}
如果
x
小于或等于0,i
将用x
值初始化,并且由于条件i>=1
,因此for
循环将不执行任何操作,因此该方法将返回0
可能您应该尝试将
i
初始化为(int)Math.abs(x)
,因为for循环只在i大于或等于1时运行,由于i>=1
,如果i(或x)一开始小于1,它根本不会运行
for (int i = x; i>=1; i--){ /*<<< here's your problem
^ you're setting i to a negative number, (if x is negative),
^then only running if i is positive.
i is never positive, so the for loop
never runs. */
//...
在这个函数中,使用了递归(,)以及
如果
y==0
则返回x,否则返回y的hcf和y除以x时的余数(这是小%符号,是运算符)。我建议您在上阅读。我很好奇,想问一下为什么是递归,但我意识到我正在学习Java函数式编程,所以您是对的,它很简洁,但对于新手来说很难理解。我认为您应该解决op的问题,并建议稍后确定,我会尽量让我的回答更有意义:)谢谢恩利古斯蒂;谢谢!简单的解决方案。
static int hcf(int x, int y){
return (y == 0) ? x : hcf (y, x%y);
}