Неожиданный вывод с использованием компаратора - PullRequest
3 голосов
/ 17 января 2012

У меня есть следующая программа

import java.util.*;
public class Test {
    public static void main(String[] args) {
        Integer[] array = { 3, 1, 4, 1, 5, 9 };
        Arrays.sort(array, new Comparator<Integer>() {
            public int compare(Integer i1, Integer i2) {
                return i1 < i2 ? -1 : (i2 > i1 ? 1 : 0);
            }
        });
        System.out.println(Arrays.toString(array));
    }
}

Это дает мне вывод [3, 1, 4, 1, 5, 9]. Почему?

Ответы [ 3 ]

6 голосов
/ 18 января 2012

потому что i1 < i2 совпадает с i2 > i1 - посмотрите, что вы написали в своем методе сравнения.

3 голосов
/ 18 января 2012
i1 < i2 
i2 > i1 

Это то же самое.

1 голос
/ 18 января 2012

Вы проверяете для i1 i2, но для i2> i1.

Измените свой компаратор на

   return i1 < i2 ? -1 : (i1 > i2) ? 1 : 0;

ДОБАВЛЕНО

В попытке внести что-то новое в два других ответа, в которых говорилось одно и то же и которые меня опередили, большинство классов-оболочек имеют встроенные методы compareTo (), чтобы избавить вас от любых мыслей. например, ваш компаратор может просто вызвать Integer.compareTo (), т.е.

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