簡體   English   中英

在兩個 ArrayList 之間平均配對元素

[英]Pair elements equally between two ArrayLists

我有一個這樣的學校作業:編寫一個方法,將學生和評分者列表作為參數,並返回一個 ArrayList,其中每個元素的格式為“studentName,graderName”。 學生應盡可能平均分配給評分者。 例如,您可以將 7 個學生分配給一個年級學生,將 6 個學生分配給另一個年級學生,但不能將 8 個學生分配給一個年級學生,而 5 個學生分配給另一個年級學生。

這就是我現在所擁有的。

    public static ArrayList<String> assignGraders(ArrayList<String> students, ArrayList<String> graders) {
    ArrayList<String> list = new ArrayList<>();
    int average = students.size()/graders.size();
    int j = 0; //Index of grader list
    for(int i = 0; i<students.size(); i++) {
        list.add(students.get(i) + ", " + graders.get(j));
        if((i % average == 0) && (i!= 0) && (j<graders.size()-1)){
            j++;
        }
    }
    return list;
}

你應該這樣做:

public static ArrayList<String> assignGraders(List<String> students, List<String> graders) {
        ArrayList<String> list = new ArrayList<>();
        int average = students.size()/graders.size();
        int j = 0; //Index of grader list
        for(int i = 0; i<students.size(); i++) {
            list.add(students.get(i) + ", " + graders.get(j));
            j++;
            if (j == graders.size()) {
                j = 0;
            }
        }
        return list;
    }

假設您有 8 名學生和 3 名教師,您只需循環查看學生列表

First student --> first teacher
Second student --> Second teacher
Third student --> Third teacher
Fourth student --> first teacher
Fifth student --> Second teacher
Sixth student --> Third teacher
Seventh student --> first teacher
Eight Student --> Second Teacher

開始學習實現到接口,而不是實現到實現。 這里 List 是接口,ArrayList 是你的實現。 這樣你的api適應性更強

public static ArrayList<String> assignGraders(ArrayList<String> students, ArrayList<String> graders)
    {
        int studentsSize = students.size();
        int gradersSize = graders.size();

        int studentToGrader = studentsSize / gradersSize;
        int assignedStudents = 0;

        ArrayList<String> studToGrader = new ArrayList<String>(students.size());
        while(assignedStudents < studentsSize)
        {
            int i = 0;
            while(i < studentToGrader)
            {
                studToGrader.add(students.get(assignedStudents) + "--" + graders.get(i));
                assignedStudents++;
                i++;
            }
        }
        return studToGrader;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM