You need to enable JavaScript to run this app. 新手求助:求给定整数数组中两数最大乘积的Java程序实现
优惠活动
大模型
产品
解决方案
定价
更多

新手求助:求给定整数数组中两数最大乘积的Java程序实现

代码逐点修复说明

先梳理当前代码跑不起来的硬伤,再顺着你原本的实现思路改成可运行版本,最后附上更高效的实现参考:

当前代码中的必错点

  • 结构语法错误:类和方法的大括号嵌套错位,maxProduct方法写完就多打了一个闭合大括号,直接把类给提前闭合,导致后面的main方法跑到类外部,编译器会直接抛出语法错误。
  • 未定义变量错误:方法末尾写的return maxProduct;对应的变量从来没有声明过,代码里只定义了参与乘积的两个临时变量a、b,全程没有单独存储计算出的乘积结果,无法通过编译。
  • 比较逻辑错误:双重循环里的判断条件,全程拿数组头两个元素的乘积arr[0]*arr[1]当固定比较基准,哪怕循环中途已经遇到更大的乘积,后续遍历还是和这个最开始的固定值对比,根本没法动态更新最大值,就算编译通过结果也是错的。

保留你原有思路的可运行修复版

完全保留双重循环遍历所有数对的逻辑(对新手友好、好理解),只修正上面提到的错误:

import java.util.*;

public class Source {
    static int maxProduct(int arr[]) {
        int n = arr.length;
        if (n < 2) {
            System.out.println("NA");
            return Integer.MIN_VALUE;
        }
        // 单独存储当前找到的最大乘积,初始值为数组头两个元素的乘积
        int maxProduct = arr[0] * arr[1];
        for (int i = 0; i < n; i++) {
            for (int j = i + 1; j < n; j++) {
                int currentProduct = arr[i] * arr[j];
                // 和当前记录的最大乘积对比,不再和固定的头两个元素乘积比
                if (currentProduct > maxProduct) {
                    maxProduct = currentProduct;
                }
            }
        }
        // 返回已定义的maxProduct变量
        return maxProduct;
    }

    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int size = s.nextInt();
        int[] arr = new int[size];
        for (int i = 0; i < size; i++) {
            arr[i] = s.nextInt();
        }
        int answer = maxProduct(arr);
        System.out.print(answer);
    }
}

注:双重循环的时间复杂度为O(n²),数组长度较小时完全可用;如果数组长度较大,会存在性能瓶颈。

更高效率的O(n)实现思路

不需要双重循环,一次遍历即可完成计算:

  • 遍历数组时记录两个关键值:数组中最大的两个数、数组中最小的两个数
  • 两个最大数的乘积、两个最小数的乘积(两个负数相乘为正,往往绝对值更大),两者取更大值就是目标结果

小提醒:如果数组元素乘积可能超过int类型的取值范围,记得把存储乘积的变量换成long类型,避免数值溢出得到错误结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.10 15:06:10