Java求数组中位数遇编译错误:median方法参数不匹配问题咨询
数组中位数求解的编译错误分析与解决方法
嘿,这个编译错误其实很好拆解,咱们先看报错信息的核心:
Exception in thread "main" java.lang.Error: Unresolved compilation problem: The method median(double[]) in the type tez3 is not applicable for the arguments (int[])
说白了就是你调用median方法时,传进去的是**int[]类型的数组**,但你定义的median方法只接受**double[]类型的参数**。Java是强类型语言,不会自动把int[]整体转换成double[],所以编译器直接给你报错说参数不匹配。
那怎么解决呢?有两种简单的办法,还能顺便搞定调用和输出返回值的问题:
方法一:把int数组转换成double数组后再调用
如果不想改动median方法的定义,那就在调用前先把你的int数组转成double数组,代码示例如下:
import java.util.Scanner; import java.io.*; import java.util.ArrayList; public class tez3 { // 假设你原有的median方法是这样的 public static double median(double[] arr) { if (arr == null || arr.length == 0) { throw new IllegalArgumentException("数组不能为空"); } // 排序(记得导入java.util.Arrays) java.util.Arrays.sort(arr); int mid = arr.length / 2; if (arr.length % 2 == 1) { return arr[mid]; } else { return (arr[mid - 1] + arr[mid]) / 2.0; } } public static void main(String args[]) throws java.io.IOException { // 示例int数组 int[] intArray = {2, 5, 1, 7, 3}; // 把int数组转换成double数组 double[] doubleArray = new double[intArray.length]; for (int i = 0; i < intArray.length; i++) { doubleArray[i] = intArray[i]; // 单个int可自动转成double } // 调用median方法,用double变量接收返回值 double medianValue = median(doubleArray); // 输出结果 System.out.println("数组的中位数是:" + medianValue); } }
方法二:重载median方法,新增int[]参数版本
如果你经常需要用int数组调用,不如直接重载median方法,新增一个接收int[]的版本,内部转成double数组再复用原逻辑,调用起来更方便:
import java.util.Scanner; import java.io.*; import java.util.ArrayList; public class tez3 { // 原有的double[]版本median方法 public static double median(double[] arr) { if (arr == null || arr.length == 0) { throw new IllegalArgumentException("数组不能为空"); } java.util.Arrays.sort(arr); int mid = arr.length / 2; return arr.length % 2 == 1 ? arr[mid] : (arr[mid - 1] + arr[mid]) / 2.0; } // 新增的int[]版本median方法,重载上面的方法 public static double median(int[] arr) { // 把int数组转成double数组 double[] doubleArr = new double[arr.length]; for (int i = 0; i < arr.length; i++) { doubleArr[i] = arr[i]; } // 调用原有的double[]版本方法 return median(doubleArr); } public static void main(String args[]) throws java.io.IOException { int[] intArray = {2, 5, 1, 7, 3}; // 现在可以直接传int数组调用了 double medianValue = median(intArray); // 输出返回值 System.out.println("数组的中位数是:" + medianValue); } }
不管用哪种方法,核心都是让传入的参数类型和方法定义的参数类型匹配,然后用double类型的变量接收median方法的返回值,最后用System.out.println()就能把结果输出啦。
内容的提问来源于stack exchange,提问作者Meltem Çomak
相关产品推荐
相关产品推荐

