Как мне распечатать все вхождения двух самых больших целых чисел в массиве? - PullRequest
0 голосов
/ 28 сентября 2019

Я пытаюсь напечатать вхождения двух старших целых в массиве целых чисел, но вывод продолжает выходить с верхними тремя.

Integer[] scores = {4,4,4,6,6,4,2,3};
        Arrays.sort(scores, Collections.reverseOrder());

        int flag = 0;
        System.out.println(scores[0]);
        int first = scores[0];

        for (int i = 1; i < scores.length; i++) {;
            if(first == scores[i]) {
                System.out.println(scores[i]);
            }else {
                first = scores[i];
                flag++;
                System.out.println(scores[i]);
            }
            if(flag == 2) {
                break;
            }
        }

Есть ли лучший способ заставить их печатать?В настоящее время они печатаются как 6 6 4 4 4 4 3. Правильный вывод должен быть 6 6 4 4 4 4

Ответы [ 3 ]

1 голос
/ 28 сентября 2019

Проблема в System.out.println(scores[i]) после того, как вы увеличили флаг до 2. Вы не должны печатать, когда это третье число в списке.

Я изменил / упростил код как

int flag = 0;
int first = scores[0];
for (int i = 0; i < scores.length; i++) {
    if(first != scores[i]) { //Encountering second number
        first = scores[i];
        flag++;
    }
    if(flag == 2) { //If already seen three numbers, break
        break;
    }
    System.out.println(scores[i]); //Good to print it
}

Более интуитивно понятно переименовать first в number или что-то еще, поскольку оно может содержать первое или второе число.

0 голосов
/ 28 сентября 2019

Я бы предпочел int[] над Integer[] и повторить отсортированный массив в обратном направлении.Вам на самом деле не нужно else здесь, просто проверьте, что вы не в конце массива - и если вы не проверяете, отличается ли текущий счет от следующего (поскольку мы выполняем итерацию в обратном направлении).Вам нужно только проверить flag, когда это условие выполнено (и break после второго изменения).Мол,

int[] scores = { 4, 4, 4, 6, 6, 4, 2, 3 };
Arrays.sort(scores);
for (int i = scores.length - 1, flag = 0; i >= 0; i--) {
    if (i != scores.length - 1 && scores[i] != scores[i + 1]) {
        flag++;
        if (flag >= 2) {
            break;
        }
    }
    System.out.println(scores[i]);
}
0 голосов
/ 28 сентября 2019

Целое число [] баллов = {4,4,4,6,6,4,2,3};Arrays.sort (оценки, Collections.reverseOrder ());

    int flag = 0;
    System.out.println(scores[0]);
    int first = scores[0];
    for (int i = 1; i < scores.length; i++) {;
        if(first == scores[i]) {
            System.out.println(scores[i]);
        }else if(first != scores[i] && flag == 0) {//you need to change this 
            first = scores[i];
            flag++;
            System.out.println(scores[i]);
        }else{ // if you dont want to traverse list after getting desired output
            break;
        }

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