Общий метод, не может сравнивать число общих типов [дубликат]

Вы можете использовать эту библиотеку: BigInt

Установите его с помощью CocoaPods:

pod 'BigInt'

Тогда вы можете использовать его следующим образом:

import BigInt

    func factorial(_ n: Int) -> BigInt {
        if n == 0 {
            return 1
        }
        else {
            return BigInt(n) * factorial(n - 1)
        }
    }

    print( factorial(50) )  // 30414093201713378043612608166064768844377641568960512000000000000

1
задан Asia x3 20 February 2014 в 11:30
поделиться

3 ответа

Ваш код не будет компилироваться, потому что вы используете объект как личность. Вам нужно указать его:

public int compareTo(Object object) throws ClassCastException{
    return age - ((Person)object).age;
}

И вам нужна только одна строка, и вы можете напрямую обращаться к полям.

4
ответ дан Bohemian 22 August 2018 в 23:32
поделиться
  • 1
    Хм, я как-то понимаю, что ты там сделал. Это выглядит похоже на рекурсивный метод, по крайней мере, на оператор return. Итак, для вашего образца он вернет возраст минус, если возраст сравнения объекта? – Asia x3 20 February 2014 в 11:42
  • 2
    Не забудьте сделать Arrays.sort(arr) в какой-то момент. – Dawood ibn Kareem 20 February 2014 в 11:49

Что позволяет Comparable для вас сортировать объекты Person, когда они находятся в контейнере, например List или Array.

Предлагаю посмотреть Arrays и Collections для того, как это сделать.

0
ответ дан Andreas Fester 22 August 2018 в 23:32
поделиться

Контракт для метода compareTo(Object obj) требует возврата:

  • n & lt; 0, если this следует считать меньше obj
  • 0, если this равно obj
  • n> 0, если this больше obj

Таким образом вы можете определить поведение сортировки для своего класса.

Arrays.sort(people);

Обратите внимание, что вы можете сортировать объекты назад, просто инвертируя знак возврата value.

Как побочная заметка, некоторые методы сортировки позволяют вам передать Comparator вместе с коллекцией, которую вы хотите отсортировать, что позволяет вам определить другой критерий сортировки, отличный от стандартного.

Arrays.sort(people, new Comparator<Person>() { ... });
0
ответ дан Marco Bolis 22 August 2018 в 23:32
поделиться
  • 1
    Какая разница с тем, что делает OP в своем методе compareTo()? – Andreas Fester 20 February 2014 в 11:33
  • 2
    ОП попросил объяснить, для какой цели служит метод compareTo, а не для другой реализации – Marco Bolis 20 February 2014 в 11:34
  • 3
    Ваше первое предложение ложно. – Dawood ibn Kareem 20 February 2014 в 11:43
  • 4
    Это? Не могли бы вы объяснить, почему? – Marco Bolis 20 February 2014 в 11:45
  • 5
    Контракт для compareTo НЕ требует возврата -1, 0 или 1. – Dawood ibn Kareem 20 February 2014 в 11:46
Другие вопросы по тегам:

Похожие вопросы: