2014-02-09 2 views
1

У меня есть это назначение, что мне нужно использовать статический метод для получения идентификаторов учеников, тогда в этом статическом методе их оценивать, если ученики прошли или провалили свои классы. Это немного сложно для меня, потому что статический метод должен принимать только один аргумент.Использование статического метода с перечислением в Java

Можно ли это сделать, не изменяя частные переменные на частные статические переменные?

Любое направление очень ценится.

import java.util.ArrayList; 
public class Grade { 
    public static void main(String[] args) { 
     ArrayList<GradeDetail> gradeList = new ArrayList<GradeDetail>() ; 

     System.out.println("Student ID: "); 

     for(String s : args) { 
      boolean match = false; 

      for(GradeDetail grade : GradeDetail.values()) { 
       if(s.equals(grade.getCode())) { 
        gradeList.add(grade); 

        match = true; 
       } 
      } 

      if(!match) { 
       System.out.printf("unknown student ID entered!"); 
      } 
     } 

     System.out.println("Students who passed: "); 
     //Some function here 

     System.out.println("Students who failed: ") 
     //Some function here 

     return; 
    } 
} 

enum GradeDetail { 
    JOHN  (101, 90) 
    , ROB  (102, 50) 
    , JAMES  (103, 55) 
    ; 

    private final int studentID; 
    private final int studentGrade; 

    GradeDetail(int id, int sGrade) { 
     studentID = id; 
     studentGrade = sGrade; 
    } 

    public int getID() {return studentID;} 

    public int getGrade() {return studentGrade;} 

} 

честно, я не знаю, как идти об этом ..

+3

Перечни являются для статических данных, таких как значения класса A, B, C. Вы никогда бы не хранить преходящие ценности, как класс Джона в качестве Enum. – jeremyjjbrown

+0

Итак, если я хочу создать статический метод в enum GradeDetail, чтобы сравнить оценки, как бы я это сделал? –

ответ

2

Было бы целесообразно, чтобы сохранить ваши данные в классе, как

class GradeDetail { 
    public final String sName ; 
    public final int iId ; 
    public final int iGrade; 
    public GradeDetail(String s_name, int i_id, int i_grade) { 
     sName = s_name; 
     iId = i_id; 
     iGrade = i_grade; 
    } 
} 

Вы бы затем создать экземпляры с

GradeDetail gdJohn = new GradeDetail("John", 101, 90) 

и доступ к нему, например, с

gdJohn.iGrade; 

Это, надеюсь, поможет вам начать работу по правильному пути.

3

Перечисления для статических данных, таких как значение класса A, B, C. Вы никогда не будете хранить временные значения, такие как оценка Джона в Enum. Почему бы вам не попробовать использовать перечисление для статических значений.

enum GradeRange { 
    A (100, 90), 
    B (89, 80), 
    C (79, 70); 


    private final int high; 
    private final int low; 

    GradeRange(int high, int low) { 
     high = high; 
     low = low; 
    } 

    public GradeRange getGrade(int percent) { 
     for (GradeRange gradeRange : GradeRange.values() { 
      if (percent <= high && percent >= low) 
       return gradeRange; 
     } 
    } 

} 

PS - я не проверял этот код

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