在Java中使用带枚举的静态方法

时间:2014-02-09 19:09:27

标签: java enums

我有这个任务,我需要使用静态方法来获取学生ID,然后在该静态方法中评估它们,如果学生已通过或未通过他们的课程。这对我来说有点挑战,因为静态方法应该只接受一个参数。

这可以通过不将私有变量更改为私有静态变量来实现吗?

非常感谢任何方向。

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;}

}

老实说,我不知道怎么回事......

2 个答案:

答案 0 :(得分:3)

枚举用于静态数据,例如A,B,C等级的值。您永远不会在Enum中存储像John等级这样的瞬态值。为什么不尝试使用枚举作为静态值。

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 - 我没有测试此代码

答案 1 :(得分: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;

这有望让你开始走上正确的道路。