Получение функции для возврата двух целых чисел - PullRequest
5 голосов
/ 06 сентября 2010

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

public static int calc (int s, int b, int c, int d, int g)
    {
        if (s==g)
            return s;
        else if (s+b==g)
                return s && b;

        else if (s + c==g)
                return s && c;

         else if (s+d==g)
                return s && d;

        else
            System.out.println("No Answer");                    
    }

Ответы [ 5 ]

11 голосов
/ 06 сентября 2010

Вы можете иметь метод, возвращающий массив int:

public static int[] calc (int s, int b, int c, int d, int g)
5 голосов
/ 06 сентября 2010

Создайте класс «pair» и верните его.

public class Pair<T,Y>
{
    public T first;
    public Y second;
    public Pair(T f, Y s)
    {
        first = f;
        second = s;
    }
}
4 голосов
/ 06 сентября 2010

Создайте небольшой внутренний класс, который имеет два целых числа.

private static class TwoNumbers {
    private Integer a;
    private Integer b;

    private TwoNumbers(Integer a, Integer b) {
        this.a = a;
        this.b = b;
    }
}

Вы создаете экземпляр класса и возвращаете его вместо этого.

2 голосов
/ 06 сентября 2010

Для этой конкретной задачи, поскольку ответ всегда возвращает s:

....
    return s;
....
    return s && b;
....
    return s && c;
....
    return s && d;
....

, вы можете просто вернуть 2-е значение.Я использую 0, чтобы указать «просто s», поскольку первый случай (if (s==g)) можно рассматривать как if (s+0==g).При необходимости используйте для этого значение часового значения, отличное от 0.

public static int calc (int s, int b, int c, int d, int g)
{
    if (s==g)
        return 0;
    else if (s+b==g)
            return b;
    else if (s+c==g)
            return c;
     else if (s+d==g)
            return d;
    else {
        // System.out.println("No Answer");

        // Probably better to throw or return a sentinel value of
        // some type rather than print to screen.  Which way
        // probably depends on whether "no answer" is a normal
        // possible condition.
        throw new IndexOutOfBoundsException("No Answer");
    }
}

Если исключение не выдается, то s всегда является первым результатом:

try {
    int result1 = s;
    int result2 = calc(s, b, c, d, g);
} catch (IndexOutOfBoundsException ex) {
    System.out.println("No Answer");
}
0 голосов
/ 06 сентября 2010

почему вы хотите это сделать? и если у вас есть такая потребность, вы не можете изменить тип возвращаемого значения на строку, потому что в случае строки у вас может быть разделитель между двумя значениями, который поможет вам в извлечении значений .... скажем, 10 и 30,

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...