Java приращения нумерации - PullRequest
       7

Java приращения нумерации

0 голосов
/ 09 февраля 2019

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

6
Берик 78
Зейнеп 100
Сания 75
Даулет 45
Абай 96
Андрей 75

Ожидаемый вывод:

1) Zeynep: 100
2) Abay: 96
3) Berik: 78
4) Saniya: 75
5) Andrey: 75
6) Daulet: 45

Мой вывод:

1) Zeynep: 100
2) Abay: 96
3) Berik: 78
4) Saniya: 75
4) Andrey: 75
5) Daulet: 45

Как видите, нумерация неверна,Ошибка должна быть где-то в логике приращения, когда две точки равны.Я передаю нумерацию в качестве аргумента для метода printMax

import java.util.ArrayList;
import java.util.Scanner;

public class a1_t13 {
public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

    int num = input.nextInt();
    ArrayList<Integer> scores_unsorted = new ArrayList<>();
    ArrayList<String> names_unsorted = new ArrayList<>();


    for (int i=0; i<num; i++) {
        String value = input.next();
        int numValue = input.nextInt();
        scores_unsorted.add(numValue);
        names_unsorted.add(value);
    }

    int b = 1;
    for (int z = 0; z<num;z++) {
        int c = getMax(scores_unsorted);
        printMax(c, names_unsorted, scores_unsorted, b);
        b++;     //<================ HERE I'M DOING AN INCREMENTATION

    }

}

public static int getMax(ArrayList list) {
    int max = 0;
    for(int i=0;i<list.size();i++) {
        if (max< (int)list.get(i)) {
            max = (int) list.get(i);
        }
    }
    return max;
}


public static void printMax(int score, ArrayList names_unsorted, ArrayList scores_unsorted, int order) {
    for (int i=0;i<names_unsorted.size();i++) {
        if ((int) scores_unsorted.get(i) == score) {
            int score_index = scores_unsorted.indexOf(Integer.valueOf(score));
            System.out.println(order+")"+names_unsorted.get(score_index).toString()+": "+score);
            scores_unsorted.remove(score_index);
            names_unsorted.remove(score_index);
        }
    }
}

} ​​

Ответы [ 3 ]

0 голосов
/ 09 февраля 2019

Проблема в том, что в функции printMax вы выполняете итерацию по всему массиву, даже если вы находите и печатаете максимальное количество записей, которые вы ищете, и вы увеличиваете значение b после выхода из цикла.Самый простой способ заставить его работать так, как вы хотите, это поставить разрыв в конце if body:

public static void printMax(int score, ArrayList names_unsorted, ArrayList scores_unsorted, int order) {
    for (int i=0;i<names_unsorted.size();i++) {
        if ((int) scores_unsorted.get(i) == score) {
            int score_index = scores_unsorted.indexOf(Integer.valueOf(score));
            System.out.println(order+")"+names_unsorted.get(score_index).toString()+": "+score);
            scores_unsorted.remove(score_index);
            names_unsorted.remove(score_index);
            break;
        }
    }
}
0 голосов
/ 09 февраля 2019

После удаления 100, 96 и 78 оба списка имеют 3 элемента.Теперь 75 - это максимум.

printMax (c, names_unsorted, scores_unsorted, b) вызывается с c = 75 и b = 4.

Теперь в printMax () это условие будет выполнено для двух элементов:

if ((int) scores_unsorted.get(i) == score)

, так как счет сейчас 75, а в списке также два 75. Поэтому вы должны разорвать цикл, если он уже найден.

Ваш ifблок условия должен быть таким:

if ((int) scores_unsorted.get(i) == score) {
    int score_index = scores_unsorted.indexOf(Integer.valueOf(score));       
    System.out.println(order+")"+names_unsorted.get(score_index).toString()+": "+score);
    scores_unsorted.remove(score_index);
    names_unsorted.remove(score_index);
    break;
}
0 голосов
/ 09 февраля 2019

Проблема в вашем printMax методе, потому что вы перебираете все имена, и у двух одинаковое количество, и вы распечатываете оба с одинаковым номером заказа.Если вы разорвете вашу петлю после того, как первый найдет ее, она сработает.

 public static void printMax(int score, ArrayList names_unsorted, ArrayList scores_unsorted, int order) {
    for (int i = 0; i < names_unsorted.size(); i++) {
        if ((int) scores_unsorted.get(i) == score) {
            int score_index = scores_unsorted.indexOf(Integer.valueOf(score));
            System.out.println(order + ")" + names_unsorted.get(score_index).toString() + ": " + score);
            scores_unsorted.remove(score_index);
            names_unsorted.remove(score_index);
            break;
        }
    }
}
...