Java 负数的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

当我在程序中输入两个负数来查找某个数字的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;
        }
    }
    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);
}