2015-02-15 4 views
-1

Метод возвращает некоторый null, пропускающий некоторые объекты. Цель метода состоит в том, чтобы возвращать сортировщик списка людей в соответствии с их «средним» и «окончательным» («средний» человек сразу же следует его «окончательный»). Может ли кому-нибудь помочь, пожалуйста, исправить это? Вот кодВозвращение null в выходном

public static Exam[] collateExams(Exam[] exams) 
    { 

     Exam[] r = new Exam[exams.length]; 
     int index = 0; 

     for (int i = 0; (i < exams.length) && (index < exams.length/2); i++) 
     { 
      if (exams[i].getExamType() == 'm') 
      { 
       r[index*2] = new Exam(exams[i].getFirstName(), exams[i].getLastName(), exams[i].getID(), "midterm", exams[i].getScore()); 
       for(int j = 0; (j < exams.length) && (index < exams.length/2); j++) 
       { 
        if((exams[j].getExamType() == 'f') && (exams[i].getID() == exams[j].getID())) 
        { 
         r[index*2 + 1] = new Exam(exams[i].getFirstName(), exams[i].getLastName(), exams[i].getID(), "final", exams[i].getScore()); 
        } 
       } 
      } 
      index++; 
     } 
     return r; 

вот выход:

null 
null 
Bill Gates 6 midterm 90 
Bill Gates 6 final 90 
James Gosling 3 midterm 100 
James Gosling 3 final 100 
Sergey Brin 22 midterm 98 
null 
Dennis Ritchie 5 midterm 94 
Dennis Ritchie 5 final 94 
Steve Jobs 9 midterm 95 
Steve Jobs 9 final 95 

Вот несортированный список, который передается в качестве параметра:

Steve Jobs 9 final 91 
Bill Gates 6 midterm 90 
James Gosling 3 midterm 100 
Sergey Brin 22 midterm 98 
Dennis Ritchie 5 midterm 94 
Steve Jobs 9 midterm 95 
Dennis Ritchie 5 final 100 
Jeff Dean 7 midterm 100 
Bill Gates 6 final 96 
Jeff Dean 7 final 100 
Sergey Brin 27 final 97 
James Gosling 3 final 100 
+0

Зачем использовать массивы, когда вы можете использовать 'java.util.List'? – maksimov

+0

Кроме того, где находится остальная часть кода и как вы их печатаете? – ha9u63ar

+0

Первая запись 'terms' -' Steve Jobs 9 final 91', поэтому я считаю 'exams [i] .getExamType() == 'm'' is * false *. Это означает, что он никогда не назовет 'r [index * 2] = ...' и пропустит индексы '0' и' 1' 'r'. Теперь, что именно здесь неясно? – Tom

ответ

0

Либо весь ваш класс проводки и тот же вопрос, или вы Joshua mark II. Теперь другие варианты говорят только об одном для цикла и других ограничений, поэтому я собираюсь игнорировать все это и обращаться к перепутанному двойному циклу выше. Это зафиксирует выше цикл:

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

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

Выход:

Sorted list: 
Exam [fn=Bill, ln=Gates, id=6, ex=m, score=90] 
Exam [fn=Bill, ln=Gates, id=6, ex=f, score=96] 
Exam [fn=James, ln=Gosling, id=3, ex=m, score=100] 
Exam [fn=James, ln=Gosling, id=3, ex=f, score=100] 
Exam [fn=Dennis, ln=Ritchie, id=5, ex=m, score=94] 
Exam [fn=Dennis, ln=Ritchie, id=5, ex=f, score=100] 
Exam [fn=Steve, ln=Jobs, id=9, ex=m, score=95] 
Exam [fn=Steve, ln=Jobs, id=9, ex=f, score=91] 
Exam [fn=Jeff, ln=Dean, id=7, ex=m, score=100] 
Exam [fn=Jeff, ln=Dean, id=7, ex=f, score=100] 
Exam [fn=Sergey, ln=Brin, id=22, ex=m, score=99] 
Exam [fn=Sergey, ln=Brin, id=22, ex=f, score=97] 
+0

этот код не работает, уже пробовал – Inferno

+0

какая часть не работает? Я добавил свой вывод выше. – Michael

+0

Вы изменили этот тип аргумента четвертого конструктора ... – Tom

0

[Изменено] @Michael, ваш код дает мне этот выход только с одним нулем:

Sorted list: 
Bill Gates 6 midterm 90 
Bill Gates 6 final 96 
James Gosling 3 midterm 100 
James Gosling 3 final 100 
Sergey Brin 22 midterm 98 
null 
Dennis Ritchie 5 midterm 94 
Dennis Ritchie 5 final 100 
Steve Jobs 9 midterm 95 
Steve Jobs 9 final 91 
Jeff Dean 7 midterm 100 
Jeff Dean 7 final 100 

Вот Класс экзамена, который имеет метод toString:

class Exam { 

    private String firstName; 
    private String lastName; 
    private int ID; 
    private String examType; 
    private int score; 


    public Exam(String firstName, String lastName, int ID, String examType, int score) 
    { 
     this.firstName = firstName; 
     this.lastName = lastName; 
     this.ID = ID; 
     this.examType = examType; 
     this.score = score; 
    } 

    public String getFirstName() 
    { 
     return this.firstName; 
    } 

    public String getLastName() 
    { 
     return this.lastName; 
    } 

    public int getID() 
    { 
     return this.ID; 
    } 

    public char getExamType() 
    { 
     char examTypeCasted = 0; 
     examTypeCasted = examType.charAt(0); 
     return Character.toUpperCase(examTypeCasted); 
    } 

    public int getScore() 
    { 
     return this.score; 
    } 

    public String toString() 
    { 
     return this.firstName + " " + this.lastName + " " + this.ID + " " + this.examType + " " + this.score; 
    } 

    public boolean equals(Exam e) 
    { 
     if(this.equals(e)) 
      return true; 
     else 
     return false; 
    } 

} 
+0

Иордания в соответствии с вашим выходом у вас отсутствует последняя запись Сергея Брина, которая, я считаю, является последней строкой в ​​файле, если я правильно помню. Проверьте свой цикл чтения – Michael

0

Эти элементы, которые показывают нулевые никогда не инициализированы Вот почему ..

public class Example2 { 

String array[] = new String[15]; 

public Example2(){ 

    for(int j=0; j<array.length-1; j++) 
     array[j]="j"; 


    for(int j=0; j<array.length; j++) 
     System.out.println(array[j]); 
} 


public static void main(String[] args){ 
    new Example2(); 
} 

} 

Этот пример напечатает 14 («J») и один null.Why? причина array [15] не инициализируется. Итак, на вашем примере с уверенностью, что эти элементы показывают null Причина никогда не инициализируется.

Смежные вопросы