Передача двух переменных в один метод для получения двух результатов - PullRequest
0 голосов
/ 09 марта 2020

Я пытаюсь передать две переменные методу, и метод возвращает мне два независимых результата.

int numX = 5;
int numY = 3;

System.out.println(displayTwiceTheNumber(numX, numY));

}
public static int displayTwiceTheNumber(int numX, int numY) {
    int numW, numZ;
    numW, numZ = 2 * (numX, numY);
    return numW numZ;        
}

Java считает, что в numW, numZ = 2 * (numX, numY); я пытаюсь переопределить numX и numY. Как мне сформулировать последний блок, чтобы взять две переменные и дать два результата?

Ответы [ 5 ]

2 голосов
/ 09 марта 2020

Одна функция int может возвращать только 1 int за раз. Если вы хотите вернуть 2 значения, попробуйте дважды вызвать функцию или создать собственный объект для использования.

0 голосов
/ 10 марта 2020

Когда у меня возникает эта проблема, я создаю частный служебный класс для обработки возвращаемых значений. Делая это таким образом, вы можете передавать различные типы в списке аргументов. Аспекты класса могут быть адаптированы к вашим требованиям.

    public static void main(String [] args) {
        int numX = 5;
        double numY = 3.0;

        Nums n = displayTwiceTheNumber(numX, numY);
        System.out.println(n.numX);
        System.out.println(n.numY);

    }
    public static Nums displayTwiceTheNumber(int numX, double numY) {
        int numW;
        double numZ;
        // do something with arguments.
        // in this case just double them and return.
        return new Nums(2*numX, 2*numY);        
    }

    private static class Nums {
        int numX;
        double numY;
        public Nums(int nx, double ny) {
            this.numX = nx;
            this.numY = ny;
        }
        public String toString() {
          return "(" + numX + ", " + numY +")";
        }
    }

Отпечатки

10
6.0
0 голосов
/ 09 марта 2020

Почему только 2 номера? Вы можете сделать это для любого числа чисел, используя массив и многие другие структуры данных, например Java collection

Пример программы, использующей массив:

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int[] n = { 5, 3 };
        System.out.println("Before change: " + Arrays.toString(n));
        change(n);
        System.out.println("After change: " + Arrays.toString(n));
    }

    static void change(int[] n) {
        // Multiply each number by 2
        for (int i = 0; i < n.length; i++) {
            n[i] *= 2;
        }
    }
}

Выход:

Before change: [5, 3]
After change: [10, 6]
0 голосов
/ 09 марта 2020

Обзор: используйте кортеж. В этом примере я использую кортеж для возврата более одного результата. Кортеж означает возвращение более одного типа результата. В этом примере я возвращаю кортеж двух целочисленных типов. Мой класс TupleCustom содержит один метод function1, который получает два параметра типа integer: x и y. Я создаю кортеж типа integer и возвращаю кортеж как переменную. Внутри прекомпилятор преобразует кортеж json затем обратно в кортеж с переменной Item1, Item2 ... ItemN в методе модульного тестирования.

  public class TupleCustom
  {
    public async Task<Tuple<int, int>> Function1(int x, int y)
    {
        Tuple<int, int> retTuple = new Tuple<int, int>(x, y);
        await Task.Yield();
        return retTuple;
    }

}

public class TestSuite
{
    private readonly ITestOutputHelper output;
    public TestSuite(ITestOutputHelper output)
    {
        this.output = output;
    }
    [Fact]
    public async Task TestTuple()
    {
        TupleCustom custom = new TupleCustom();

        Tuple<int, int> mytuple = await custom.Function1(1,2);

        output.WriteLine($" Item1={mytuple.Item1} Item2={mytuple.Item2}  ");

    }
0 голосов
/ 09 марта 2020

Вам необходимо изменить тип возвращаемого значения функции. В настоящее время тип возвращаемого значения - int, поэтому вы должны вернуть одно целое число.

Чтобы вернуть два целых числа, вам следует рассмотреть возможность возврата массива или списка или чего-то подобного.

public static int[] displayTwiceTheNumber(int numX, int numY){
//your code that do something
   int[] ret = {numW, numZ};
   return ret;
}

Или зная, что эта функция изменит значения numW и numZ, вы можете объявить их как глобальную переменную. Теперь, когда вы вызываете эту функцию, эти переменные будут изменены. Затем вы можете использовать numW и numZ впоследствии.

public int numW;
public int numZ;

public static void displayTwiceTheNumber(int numX, int numY){
//your code that do something and modifies numW and numZ
}


public static void anotherfunction(){
   //after calling displayTwiceTheNumber, numW and numZ would have the appropriate value
   //you can now just use numW and numZ directly
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...