Как вывести НОД чисел, считанных с клавиатуры?

Как выводить на экран наибольший общий делитель (НОД) двух чисел, считанных с клавиатуры, и успешно завершиться?

public class Solution {

    public static void main(String[] args) throws Exception {
        Scanner console = new Scanner(System.in);
        int result = 1;

        int number1 = console.nextInt();
        int number2 = console.nextInt();

        String target1 = calc(number1);
        String target2 = calc(number2);

        String[] array1 = target1.split(" ");
        String[] array2 = target2.split(" ");

        String numbersSimilar = "";

        for (String text1 : array1) {
            for (String text2 : array2) {
                if (Objects.equals(text1, text2)) {
                    numbersSimilar += text1 + " ";
                }
            }
        }

        String[] plusArray = numbersSimilar.split(" ");

        for (String text : plusArray) {
            result *= Integer.parseInt(text);
        }

        System.out.println(result);
    }

    static String calc(int number) {
        int result = number;
        String target = "";

        while(result != 1) {
            if (result % 2 == 0)
                target += 2 + " ";
            else if (result % 3 == 0)
                target += 3 + " ";
        }
        return String.valueOf(result += 1);
    }
}

Ответы (1 шт):

Автор решения: Дмитрий

Я не совсем понимаю, чем вы руководствовались при написании этого кода. В моем понимании решение задачи по нахождению НОД начинается с поиска алгоритма расчета этого самого НОД. Этот самый алгоритм, именуемый алгоритм Евклида, находится без проблем по первому запросу в гугле, в том числе в виде весьма понятной схемы. После этого должен быть написан метод, сигнатуру которого определяет условие задачи: в аргументах принимает два целочисленных значения, возвращаете одно, которое и является НОД. В этом методе реализуется евклидов алгоритм в соответствии со схемой. Теперь следующая задача - пользовательский ввод. И снова пишем соответствующий метод... И остается лишь метод main, который должен всего лишь использовать уже написанные методы, получить результат и вывести в консоль.

import java.util.Optional;
import java.util.Scanner;

public class Main {
    
    private final static Scanner SCANNER = new Scanner(System.in);

    public static void main(String[] args) {        
        Integer inputNumber1 = input("Enter first number : ").orElse(0);
        Integer inputNumber2 = input("Enter second number : ").orElse(0);
        int nod = nod(inputNumber1, inputNumber2);
        System.out.println("NOD of " + inputNumber1 + " and " + inputNumber2 + " is " + nod);
    }
    
    private static Optional<Integer> input(String message) {
        try {
            System.out.println(message);
            return Optional.of(Integer.valueOf(SCANNER.nextLine()));
        } catch (NumberFormatException e) {
            return Optional.empty();
        }
    }

    private static int nod(int a, int b) {
        if (a != 0 && b != 0) {
            if (a > b) a = a % b;
            else b = b % a;
            return nod(a, b);
        } 
        else return a + b;
    }

}
→ Ссылка