You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修正Java循环,仅在两数互质时输出Relatively Prime

Java公约数程序的逻辑错误修正

需求

编写Java程序,接收两个用户输入的正整数,输出它们的所有公约数(包含1);仅当两数互质(即公约数只有1)时,在输出1后打印“互质”。

问题根源

你提供的代码中,只要遍历到i=1就无条件打印“Relatively Prime”,完全没考虑后续是否存在其他公约数。哪怕两数有多个公约数,这条提示也会被错误输出,不符合需求。另外原代码还有个小问题:遍历上限固定为b,如果a比b小,会做多余的循环,应该取两数中的较小值作为遍历上限。

错误代码

import java.util.Scanner;

public class DivisorDemo {
    public static void printCommonDivisors(int a, int b) {
        System.out.println("Common divisors of " + a + " and " + b + ":");
        for (int i = 1; i <= b; i++)
            if (a % i == 0 && b % i == 0) {
                if (a % i == 0 && b % i == 0) { // 重复判断,无意义
                    System.out.println(i);
                    if (i == 1)
                        System.out.println("Relatively Prime");
                }
            }
    }

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("Please enter two positive integers:");
        int input1 = scan.nextInt();
        int input2 = scan.nextInt();
        printCommonDivisors(input1, input2);
    }
}

修正后的代码

用一个布尔标记变量hasOtherDivisor记录是否存在大于1的公约数,遍历结束后再判断是否需要打印“互质”提示,同时把所有提示文本改成中文:

import java.util.Scanner;

public class DivisorDemo {
    public static void printCommonDivisors(int a, int b) {
        System.out.println(a + " 和 " + b + " 的公约数:");
        boolean hasOtherDivisor = false;
        // 取两数中的较小值作为遍历上限,减少无效循环
        int maxDivisor = Math.min(a, b);
        
        for (int i = 1; i <= maxDivisor; i++) {
            if (a % i == 0 && b % i == 0) {
                System.out.println(i);
                // 如果找到大于1的公约数,标记为true
                if (i > 1) {
                    hasOtherDivisor = true;
                }
            }
        }
        
        // 只有没有其他公约数时,才打印互质提示
        if (!hasOtherDivisor) {
            System.out.println("互质");
        }
    }

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入两个正整数:");
        int input1 = scan.nextInt();
        int input2 = scan.nextInt();
        printCommonDivisors(input1, input2);
    }
}

测试验证

案例1:互质的两个数(3和5)

请输入两个正整数:
3
5
3 和 5 的公约数:
1
互质

案例2:有多个公约数的两个数(10和20)

请输入两个正整数:
10
20
10 和 20 的公约数:
1
2
5
10

内容的提问来源于stack exchange,提问作者user20696042

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 23:35:21