Метод (double []) в типе main не применим для аргументов (int [])

Я пытаюсь найти медианное значение массива в Java.

У меня исключение:

Исключение в потоке "main" java.lang.Error: Нерешенная проблема компиляции:

Метод median (double []) в типе tez3 не применим для аргументов (int [])

на 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];
        }
    }
}

Javascript - это не Java. Постарайтесь определить язык, на котором вы пишете код.

CertainPerformance 02.05.2018 12:34
java != javascript
Mohammad Usman 02.05.2018 12:34
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
963
2

Ответы 2

Проблема именно в том, что написано в сообщении об ошибке. Ваш метод median () принимает в качестве параметра double [].

Но когда вы пытаетесь вызвать его, вы указываете ему numberList в качестве параметра. Но numberList - это int [], то есть это не double [].

Самое простое решение - изменить median () так, чтобы он принимал параметр int [], а не double [].

Я создаю новый массив, используя double, но получаю сообщение об ошибке «Невозможно создать статическую ссылку на нестатический метод median (double []) из типа tez3». Что с этим делать, или я просто изменяю медиану с помощью int, как вы сказали?

Meltem Çomak 02.05.2018 12:49

@ MeltemÇomak, это новая ошибка. Так же, как ваш метод mode () статичен, ваш метод median () тоже должен быть. В противном случае вам следует переработать весь код, чтобы ни один из них не стал статичным.

kumesana 02.05.2018 12:51

Проблема в том, что вы хотите преобразовать все элементы в вашем списке int [] в двойные. Если вы не хотите изменять параметры 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];

Другие вопросы по теме