Похоже, я застрял на довольно простом задании. Мне было интересно, сможет ли кто-нибудь привести меня в правильное русло и объяснить мне, что не так. Я создал массив со вставленными заранее заданными значениями. Теперь мне нужно получить минимальные / максимальные значения этого массива и также отобразить их. Я продолжаю получать эти две ошибки

".java: 126: error: метод getMax в классе HighArray не может быть применен к данным типам;"

".java: 126: error: метод getMin в классе HighArray не может быть применен к данным типам;"

Если бы кто-нибудь мог мне помочь и объяснить, почему это так, я был бы очень признателен. Спасибо!

class HighArray
{
    private long[] a;
    private int nElems;

    public HighArray(int max)
    {
        a = new long[max];
        nElems = 0;
    }

   //Search Method 
    public boolean find(long searchKey)
    {
        int j;
        for(j=0; j<nElems; j++)
            if(a[j] == searchKey)
                break;
        if(j == nElems)
            return false;
        else
            return true;
    }

    //Insert method     
    public void insert(long value)
    {
        a[nElems] = value;
        nElems++;
    }

    //Delete method        
    public boolean delete(long value)
    {
        int j;
        for(j=0; j<nElems; j++)
            if( value == a[j] )
                break;
        if(j==nElems)
            return false;
        else
        {
            for(int k=j; k<nElems; k++)
                a[k] = a[k+1];
            nElems--;
            return true;
        }
    }

    //Display Array Contents 
    public void display()
    {
        for(int j=0; j<nElems; j++)
            System.out.print(a[j] + " ");
        System.out.println(" ");
    }

    //Max Method 
    public static int getMax(int[] a)
    {
        int maxValue = a[0];
        for(int i=1;i < a.length;i++)
        {
            if(a[i] > maxValue)
            {
                maxValue = a[i];
                System.out.print("The max value is" + a[i]);
            }
        }
        return maxValue;
    }

    //Min Method
    public static int getMin(int[] a)
    {
        int minValue = a[0];
        for(int i=1;i<a.length;i++)
        {
            if(a[i] < minValue)
            {
                minValue = a[i];
                System.out.print("The min value is" + a[i]);
            }
        }
        return minValue;
    }
}

public class Assignment
{
    public static void main(String[] args)
    {
        int maxSize = 100;
        HighArray arr = new HighArray(maxSize);
        arr.insert(77);
        arr.insert(99);
        arr.insert(44);
        arr.insert(55);
        arr.insert(-22);
        arr.insert(88);
        arr.insert(-11);
        arr.insert(00);
        arr.insert(66);
        arr.insert(-33);

        arr.display();
        arr.getMax();
        arr.getMin();

        int searchKey = 35;
        if( arr.find(searchKey) )
            System.out.println("Found" + searchKey);
        else
            System.out.println("Can't Find " + searchKey);

        arr.delete(00);
        arr.delete(55);
        arr.delete(99);

        arr.display();
    }
}
           
-3
WCC96 14 Май 2016 в 17:20

3 ответа

Лучший ответ

Методы:

  • public static int getMax(int[] a) и
  • public static int getMin(int[] a)

Имеют int[] в качестве входного параметра,
но позже они вызываются без каких-либо параметров: arr.getMax(); и arr.getMin();.

Это причина ошибки, которую вы получаете от компилятора.

РЕДАКТИРОВАТЬ:

Возможно, вы захотите изменить свои методы так, чтобы они не были статическими и не имели никаких входных параметров (массив a будет использоваться непосредственно из объекта, а не передаваться методу), поэтому вы могут использовать методы объекта класса следующим образом: arr.getMax();.

Для этого измените код следующим образом:

  • public static int getMax(int[] a) - & gt; public long getMax()
  • public static int getMin(int[] a) - & gt; public long getMin()

* Примечание. Тип возвращаемого значения методов getMax и getMin изменен с int на long, поскольку long - это тип массива в HighArray класс.

3
Nemanja Trifunovic 14 Май 2016 в 14:50

Вам нужно изменить методы getMin и getMax.

Он также не должен быть статическим, иначе вы не сможете получить доступ к массиву значений в этом методе. Также ваш массив имеет тип long, поэтому возвращаемое значение тоже должно быть длинным.

    // Max Method

public long getMax() {
    long maxValue = a[0];

    for (int i = 1; i < a.length; i++) {

        if (a[i] > maxValue) {
            maxValue = a[i];
            System.out.println("The max value is" + a[i]);

        }
    }
    return maxValue;
}

// Min Method

public  long getMin() {
    long minValue = a[0];

    for (int i = 1; i < a.length; i++) {

        if (a[i] < minValue) {
            minValue = a[i];
            System.out.println("The min value is" + a[i]);
        }
    }

    return minValue;
}
0
Martin S 14 Май 2016 в 14:37

Проблема с переменным затенением.

public static int getMax(int[] a) // <-- this a is different than the other one 
  {  
  int maxValue = a[0];  

Так,

  1. вам действительно не нужен параметр
  2. ваш массив имеет длинные значения, а не значения int
  3. Метод не должен быть статичным

Код

public long getMax() 
  {  
  long maxValue = a[0];  

То же самое для мин.

0
OneCricketeer 14 Май 2016 в 14:50