Величайшая программа общего делителя Только печать 1 - PullRequest
0 голосов
/ 27 февраля 2020

Я делаю программу, в которой вы вводите два целых числа, и программа находит наибольший общий делитель между двумя числами.

Он работает нормально, за исключением того, что печатает «1» как GCD, даже если два числа должны иметь разные GCD. (Пример: 4 и 64. GCD должно быть 4, но 1 все еще печатается.) Я не могу понять, что не так с моим кодом.

Для тех, кто хочет ответить, используя один метод, я могу 't: это задание, которое требует, чтобы я использовал два разных метода в одной и той же программе. Пожалуйста, помогите?

Спасибо за чтение и хорошей недели.

Вот мой код:

import java.util.Scanner;

public class greatestCommonDivisorMethod {

    public static void main(String[] args) 
    {
        Scanner input = new Scanner(System.in);

        //Number entry prompts       
        System.out.print("Please enter first integer: ");
        int num1 = input.nextInt();
        System.out.print("Please enter second integer: ");
        int num2 = input.nextInt();

        //Result printed
        System.out.println("The greatest common divisor of " +num1+ " and " +num2+ " is " +gcd(num1, num2)+".");
    }


    public static int gcd(int num1, int num2) {
        int gcd = 1;
        int k = 2;
        while (num1 <= k && k <= num2) 
        {
             if (num1 % k == 0 && num2 % k == 0)
                 gcd = k;
                 k++;  
        }

        return gcd;
    }
} 

Ответы [ 3 ]

0 голосов
/ 27 февраля 2020

Условие while должно иметь k<=num1 вместо num1<=k

0 голосов
/ 27 февраля 2020
while (num1 <= k && k <= num2) 
{
      if (num1 % k == 0 && num2 % k == 0)
      gcd = k;
      k++;  
}

Похоже, вы случайно переключили num1 и k в то время как l oop.

0 голосов
/ 27 февраля 2020

Присвойте возврат переменной, затем напечатайте ее

int answer = gcd(num1, num2);

, затем при печати приводите к типу String или используйте метод toString.

 System.out.println("The greatest common divisor of " +answer.toString());
...