Java-функция возвращает несколько переменных - вызов - PullRequest
0 голосов
/ 07 июня 2018
public static void delete(char[] qa, int[] aa, int[] bb) {
    if(front == -1 || front > rear) {
        System.out.println("Queue Underflow ");
        return;
    } else {
        //printf("Element deleted from queue is : %c\n", queue_array[front]);
        qa[0] = queueArray[front]; //to stoixeio pou deleted
        aa[0] = queueArray2[front2]; // x syntetagmenh del elem
        bb[0] = queueArray3[front3]; // y coordinate of del elem
        // *timegg=timeg;
        front = front + 1;
        front2 = front2 + 1;
        front3 = front3 + 1;

    }
}

Я создал вышеуказанную функцию, так как хочу, чтобы она возвращала эти 3 значения: qa, aa, bb.Когда я пытаюсь вызвать его как delete(qa, aa, bb);, я получаю:

method delete cannot applied to given types
required char[], int[], int[]
found char, int, int
reason actual and formal argument lists differ in lenght

Как правильно и целесообразно вызвать эту функцию?Я думал, что то, что я написал, было правильным, потому что все в java - ссылка.Я новичок в Java, так что, возможно, я неправильно понял концепции.

Ответы [ 3 ]

0 голосов
/ 07 июня 2018

почему бы просто не вернуть массив из 3 значений?Я просто не вижу смысла передавать 3 массива, когда вы в любом случае устанавливаете только первый параметр.

public static int[] delete()
{
   int[] arr = new int[3];

   <do whatever you want to arr>

   return arr;
}

Это разрешенная операция в Java, так как она управляется памятью.

Редактировать:

Если вам нужно, чтобы универсальные типы возвращались в Java:

public static ArrayList delete()
{
    ArrayList ret = new ArrayList();
    ret.Add('c');  //qa
    ret.Add(0);    //aa
    ret.Add(0);    //bb
    return ret;    
}
0 голосов
/ 07 июня 2018

Вместо передачи char [] и int [] вы передаете char и int.

Это будет работать.

char qa[] = new char[20];
int aa[] = new int[20];
int bb[] = new int[20];

delete(qa,aa,bb);
0 голосов
/ 07 июня 2018

Функция ожидает 3 массива в качестве аргументов.Вы вызываете функцию с 3 примитивными значениями.Следовательно, сообщение об ошибке, указывающее, что фактический тип аргументов не соответствует ожидаемому.

Если у вас есть 3 массива, объявленных аналогично следующему (где 'a', 'b','c', 1, 2, 3 заменяются вашими фактическими значениями):

char qa[] = { 'a', 'b', 'c' };
int aa[] = {1, 2, 3};
int bb[] = {1, 2, 3};

Тогда ваш вызов метода будет работать:

delete(qa, aa, bb);

Обратите внимание, что сообщение об ошибке вы включилив вашем сообщении не соответствует предоставленный код, поскольку сообщение об ошибке показывает, что ожидалось 4 аргумента, тогда как предоставленный код имеет функцию, которая требует 3 аргумента.

...