我试图在Java中找到数组的中位数。
我得到了例外:
线程“main”中的异常java.lang.Error:未解决的编译问题:
tez3类型中的方法median(double [])不适用于参数(int [])
at tez3.main(tez3.java:33)
我的代码如下。问题是什么?我该如何打印双重功能?
import java.util.Scanner;
import java.io.*;
import java.util.ArrayList;
public class tez3 {
public static void main(String args[]) throws java.io.IOException {
Scanner s = new Scanner(new File("C:\\tny\\Deneme1.txt"));
int[] numberList = new int[10];
int i = 0;
int count = 0;
int result = 0;
while (s.hasNextInt()) {
numberList[i++] = s.nextInt();
}
for (i = 0; i < numberList.length; i++) {
System.out.println(+(i + 1) + ".Value: " + numberList[i]);
}
for (i = 0; i < numberList.length; i++) {
count++;
}
for (i = 0; i < numberList.length; i++) {
result += numberList[i];
}
System.out.println("Average of the Values is: " + result / count);
System.out.println("Mode of the Values is: " + mode(numberList));
System.out.println("Median of the Values is: " + median(numberList));
}
public static int mode(int numberList[]) {
int maxValue = 0, maxCount = 0;
for (int i = 0; i < numberList.length; ++i) {
int count = 0;
for (int j = 0; j < numberList.length; ++j) {
if (numberList[j] == numberList[i]) {
++count;
}
}
if (count > maxCount) {
maxCount = count;
maxValue = numberList[i];
}
}
return maxValue;
}
public double median(double[] numberList) {
int factor = numberList.length - 1;
double[] first = new double[(double) factor / 2];
double[] last = new double[first.length];
double[] middleNumbers = new double[1];
for (int i = 0; i < first.length; i++) {
first[i] = numbersList[i];
}
for (int i = numberList.length; i > last.length; i--) {
last[i] = numbersList[i];
}
for (int i = 0; i <= numberList.length; i++) {
if (numberList[i] != first[i] || numberList[i] != last[i]) {
middleNumbers[i] = numberList[i];
}
}
if (numberList.length % 2 == 0) {
double total = middleNumbers[0] + middleNumbers[1];
return total / 2;
} else {
return middleNumbers[0];
}
}
}
答案 0 :(得分:0)
问题正是错误信息所说的。你的方法median()以double []为参数。
但是当你试图调用它时,你可以将numberList作为参数。但是numberList是一个int [],也就是说它不是double []。
最简单的解决方法是修改median(),使其所需的参数为int []而不是double []。
答案 1 :(得分:0)
问题是你要将int [] list中的所有元素都转换为double。 如果您不想将median的参数更改为int [],那么我处理此方法的首选方法是重载方法并转换参数
所以,它会是这样的:
public double median(int[] numberList) {
double[] doubleList = new double[numberList.size()];
for(int i=0; i<doubleList.size(); i++){
doubleList[i] = (double)numberList[i];
}
return median(doubleList);
}
如果您确实更改了原始“中位数”方法的参数,那么每次调用时都只需要转换numberList元素,即
first[i] = (double) numbersList[i];