Как отсортировать массив без потери ссылки на индекс чтоли? - PullRequest
0 голосов
/ 06 мая 2019

Хорошо.По сути, я начинающий программист (взял несколько классов, но учусь медленно / плотно), и ответ, вероятно, смехотворно прост.У меня есть один массив строк, который имеет имена, а другой, который связан с оценками.

names[0] = blinky   
scores[0] = 42 (blinky's score)   
names[1] = inky   
scores[1] = 37 (inky's score)  

в цикле for я вызываю номер (индексный номер? Я ужасен с терминами. Единственная вещь, которая, кажется, имеет смысл - это сам код).Как бы то ни было, я хочу сохранить i.

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

Я не знаю, если использовать util.Arrays или что-нибудь, что будет автоматически сортировать поможет.Полагаю, мне придется вручную отсортировать их, чтобы выровнять имена и числа

//Example  
String[] names = {"Blinky","Inky","Pinky","Clyde"};  
int[] scores = {42,37,67,50};  

for (int = 0; i < scores.length; i++){  
System.out.println("what do?")  
}

Как бы мне составить список, который бы упорядочил имена?Чем проще, тем лучше.Я был бы очень признателен за помощь.

Редактировать: Я хотел бы поблагодарить всех вас за вашу помощь!:)

Ответы [ 2 ]

0 голосов
/ 06 мая 2019

Чтобы получить результаты ниже, вы можете попробовать следующие коды:

Unsorted
---------
Blinky, score=42
Inky, score=37
Pinky, score=67
Clyde, score=50
sort by score ascending
Inky, score=37
Blinky, score=42
Clyde, score=50
Pinky, score=67 
sort by Name ascending 
Blinky, score=42
Clyde, score=50
Inky, score=37
Pinky, score=67

1) создать новый класс с именем NameScoreEntity для хранения обеих переменных вместе (таким образом, когда вы сортируете, как имена, так иоценки делаются одновременно)

public class NameScoreEntity {
    String name;
    int score;

    public NameScoreEntity(String name, int score) {
        this.name = name;
        this.score = score;
    }

    @Override
    public String toString() {
        return name + ", score=" + score;
    }
}

2) затем вы создаете arrayList вашего нового класса для копирования двух ваших массивов в.

    String[] names = {"Blinky","Inky","Pinky","Clyde"};
    int[] scores = {42,37,67,50};

    List<NameScoreEntity> data = new ArrayList<>(); // your data is now stored here

    for (int i= 0; i < scores.length; i++){
        data.add(new NameScoreEntity(names[i], scores[i]));
    }
    //print unsorted
    System.out.println("Unsorted\n---------");
    for (NameScoreEntity e : data) {
        System.out.println(e);
    }

3) наконец, вы простоиспользуйте метод sort (), который доступен в списке, чтобы выполнить сортировку.

    System.out.println("sort by score ascending");
    data.sort(new Comparator<NameScoreEntity>() {
        @Override
        public int compare(NameScoreEntity o1, NameScoreEntity o2) {
            return Integer.compare(o1.score, o2.score); //for descending just swap o1 & o2
        }
    });
    for (NameScoreEntity e : data) {
        System.out.println(e);
    }

    System.out.println("sort by Name ascending");
    data.sort(new Comparator<NameScoreEntity>() {
        @Override
        public int compare(NameScoreEntity o1, NameScoreEntity o2) {
            return o1.name.compareTo(o2.name) ;//for descending just swap o1 & o2
        }
    });
    for (NameScoreEntity e : data) {
        System.out.println(e);
    }
0 голосов
/ 06 мая 2019

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

// new TreeMap that sorts from highest to lowest
Map<Integer, String> map = new TreeMap<>(Collections.reverseOrder());

Затем просто put все ваши значения в Map, используя цикл, который у вас уже есть:

for(int i = 0; i < scores.length; i++)
        map.put(scores[i], names[i]);

И, наконец, вы можете просто напечатать Map:

System.out.println(map);

Результат:

{67 = Pinky, 50 = Clyde, 42 = Blinky, 37 = Inky}

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