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

Java勾股数程序输入非法值后输出多个结果的修复咨询

修复勾股数程序的重复输出问题

问题根源

当前代码在输入不合法(小于2)时,通过递归调用main方法重新获取输入,但递归调用完成后,会回到原方法继续执行后续的输出语句。比如输入-4触发递归,后续输入合法的9并输出结果后,程序会回到-4对应的main方法实例,继续执行输出逻辑,导致同时输出两次结果。

修复方案

方案1:用循环替代递归(推荐)

使用while循环持续获取输入,直到得到符合要求的数值,避免递归带来的栈残留问题,逻辑更清晰:

import java.util.*;
public class Pythagorean_Triplet
{
    public static void main(String[] args) 
    {
        Scanner sc = new Scanner(System.in);
        int a;
        while (true) {
            System.out.println("Enter number to find Pythagorean Triplet : ");
            a = sc.nextInt();
            if (a >= 2) {
                break; // 输入合法,退出循环
            }
            System.out.println("\nYour number is not a natural number or is 1\n");
        }
        double p1 = 2 * a;
        double p2 = Math.pow(a, 2) - 1; 
        double p3 = Math.pow(a, 2) + 1;  
        System.out.println("\n" + p1 + ", " + p2 + " and " + p3 + " form a 'Pythagorean Triplet'");
        sc.close(); // 关闭Scanner释放资源
    }
}

方案2:递归后添加return终止当前方法

如果要保留递归逻辑,在调用main后添加return,阻止原方法继续执行输出语句:

import java.util.*;
public class Pythagorean_Triplet
{
    public static void main(String[] args) 
    {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter number to find Pythagorean Triplet : ");
        int a = sc.nextInt();
        if (a < 2) {
            System.out.println("\nYour number is not a natural number or is 1\n");
            main(args);
            return; // 递归调用后直接返回,不再执行后续输出
        }
        double p1 = 2 * a;
        double p2 = Math.pow(a, 2) - 1; 
        double p3 = Math.pow(a, 2) + 1;  
        System.out.println("\n" + p1 + ", " + p2 + " and " + p3 + " form a 'Pythagorean Triplet'");
        sc.close();
    }
}

方案对比

  • 方案1的循环逻辑更符合用户输入处理的常规写法,避免了递归可能导致的栈溢出风险(多次输入不合法值时),代码可读性更高。
  • 方案2仅适用于简单场景,递归处理输入并非最佳实践,不推荐在复杂逻辑中使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 21:05:22