在java中只使用SINGLE循环返回一个已排序的对象数组



不允许使用Arraylist或Comparator 只允许一个循环我对如何在'M'之后立即返回'F'感到困惑。smb能帮上忙吗?如何在SINGLE循环中返回一个人的"M",然后立即返回同一个人的他的"F"。该方法返回一个数组,该数组以第一个人(对象)的"M"(中期)开头,紧接着是他的"F"(最终)。比方说。。最初看起来是这样的:

| Index | First  | Last      | ID | ExamType | Score |    
    |-------+--------+-----------+----+----------+-------|    
    |     0 | Linus  | Torvalds  |  9 | final    |    91 |    
    |     1 | Brian  | Kernighan |  6 | midterm  |    90 |    
    |     2 | Donald | Knuth     |  3 | midterm  |   100 |    
    |     3 | Grace  | Hopper    |  0 | final    |    80 |    
    |     4 | James  | Gosling   |  5 | final    |    90 |    
    |     5 | James  | Gosling   |  5 | midterm  |   100 |    
    |     6 | Brian  | Kernighan |  6 | final    |    80 |    
    |     7 | Dennis | Ritchie   |  4 | final    |    80 |    
    |     8 | Dennis | Ritchie   |  4 | midterm  |    90 |    
    |     9 | Grace  | Hopper    |  0 | midterm  |   100 |    
    |    10 | Donald | Knuth     |  3 | final    |    90 |    
    |    11 | Linus  | Torvalds  |  9 | midterm  |    90 |

该方法的最终产品应该是:

| Index | First  | Last      | ID | ExamType | Score |    
    |-------+--------+-----------+----+----------+-------|    
    |     0 | Brian  | Kernighan |  6 | midterm  |    90 |    
    |     1 | Brian  | Kernighan |  6 | final    |    80 |    
    |     2 | Donald | Knuth     |  3 | midterm  |   100 |    
    |     3 | Donald | Knuth     |  3 | final    |    90 |    
    |     4 | James  | Gosling   |  5 | midterm  |   100 |    
    |     5 | James  | Gosling   |  5 | final    |    90 |    
    |     6 | Dennis | Ritchie   |  4 | midterm  |    90 |    
    |     7 | Dennis | Ritchie   |  4 | final    |    80 |    
    |     8 | Grace  | Hopper    |  0 | midterm  |   100 |    
    |     9 | Grace  | Hopper    |  0 | final    |    80 |    
    |    10 | Linus  | Torvalds  |  9 | midterm  |    90 |    
    |    11 | Linus  | Torvalds  |  9 | final    |    91 | 

我的代码:

 public static Exam[] collateExams(Exam[] exams)
        {
            Exam [] r = new Exam[10];
            r = exams;
            int[] position = new int[10];
            int index = 0;

            for(int i = 0; i < exams.length; i++)
            {
                if(r[i].getExamType() == 'M')
                {   
                    r[index*2] = new Exam(r[index].getFirstName(), r[index].getLastName(),
                                      r[index].getID(), r[index].getExamType(), r[index].getScore());
                    position[index*2] = r[index].getID();
                    index++;
                    if((r[index+1].getExamType() == 'F') && (position[index+1] == r[i].getID()))
                    {
                        r[index+1] = new Exam(r[index].getFirstName(), r[index].getLastName(),
                                  r[index].getID(), r[index].getExamType(), r[index].getScore());
                    }
                    /*if(position[i].getID() == r[i].getID())
                        r[i] = new Exam(r[i].getFirstName(), r[i].getLastName(),
                                  r[i].getID(), r[i].getExamType(), r[i].getScore()); 
                        */

                }
            }
            return r;
        }

您的任务是从给定的输入中返回一个已排序的Exam数组,并根据考试类型进行排序。基本上,您需要第一次循环使用exams数组,并保存具有期中考试类型的每个条目。在执行此操作的同时,还要为该人员保存预期的最终索引。然后,您将再次循环使用exams数组,使用保存在HashMap中的索引保存具有期末考试类型的每个条目。我没有测试代码,但我评论了它,所以你应该理解它。

public static Exam[] collateExams(Exam[] exams){
    Exam [] r = new Exam[exams.length];
    // used to keep track of the person's ID and the index in the return array
    Map<Integer, Integer> finalIndices = new HashMap<Integer, Integer>();
    int midtermIndex = 0;
    // first loop, saves only midterm
    for(int i = 0; i < exams.length; i++) {
      // midterm comes first, so its index in the array is always even 
      // final comes after midterm, so its index is always odd
      if(exams[i].getExamType() == 'M') {
        // midterm found, save in r
        r[midtermIndex] = new Exam(exams[i].getFirstName(), exams[i].getLastName(),
                              exams[i].getID(), exams[i].getExamType(), exams[i].getScore());
        // save the final index position for this person (midtermIndex + 1)
        finalIndices.put(exams[i].getID(), midtermIndex+1);
        // increment by 2, 
        midtermIndex+=2;
      }
    }
    //second loop, saves final
    for(int i = 0; i < exams.length; i++) {
      if(exams[i].getExamType() == 'F') {
        // final found, get the index from hashmap and save in r
        int finalIndex = finalIndices.get(exams[i].getID());
        r[finalIndex] = new Exam(exams[i].getFirstName(), exams[i].getLastName(),
                            exams[i].getID(), exams[i].getExamType(), exams[i].getScore());
      }
    }
    // should be sorted
    return r;
}

祝你好运,如果这有帮助,请告诉我。

相关内容

最新更新