最大的公约数循环

mik*_*gan 2 java

我正在做一些自学成才的Java,但似乎无法弄清楚这个循环中的问题:

问题是找到两个整数n1和n2的最大公约数,其中d是较小的值.方法是递减d直到GCD或它达到1 ...这是我到目前为止的地方:

    Scanner input = new Scanner(System.in);
    System.out.println("Please enter two integers: ");
    int n1 = input.nextInt();
    int n2 = input.nextInt();

    int d = 0;
    int temp = 0;
    //finds the lowest value
    if(n1 < n2) {
        temp = n1;
        n1 = n2;
        n2 = temp;
    }

    for(d = n1;(n1 % d !=0 && n2 % d != 0);d--)  {

    }

    System.out.println("The GCD of " + n1 + " and " + n2 + " is " + d);
Run Code Online (Sandbox Code Playgroud)

有什么指针吗?

zw3*_*324 6

这里的逻辑错了:

(n1 % d !=0 && n2 % d != 0)
Run Code Online (Sandbox Code Playgroud)

改成:

(n1 % d !=0 || n2 % d != 0)
Run Code Online (Sandbox Code Playgroud)

或者一旦看到n1 n2 的除数而不是它们的GCD,代码将停止,因为循环终止条件应该是你想要做的否定.