如何创建一个计算枚举类型的计数器?

How to Create a Counter that Counts Enumerated Types?

public class HackHornets_Roster
{
    enum MembershipStat {CoPresident, Secretary, Treasurer, RegMember,Sponser}

    public static void main (String[] args)
    {

        final int CoPresidents = 2;

        // declare members
        MembershipStat ChaseW;
        MembershipStat Saif;
        MembershipStat MrLee;
        MembershipStat Rahil;
        MembershipStat Donovon;
        MembershipStat Elliot; 
        MembershipStat Armaan;
        MembershipStat JacksonM;
        MembershipStat Cyrus;
        MembershipStat Avery;
        MembershipStat PeterM;
        MembershipStat Mahdi;
        MembershipStat GeorgeW; 

        // assign Member Roles
        ChaseW = MembershipStat.CoPresident;
        Saif = MembershipStat.CoPresident;
        MrLee = MembershipStat.Sponser;
        Rahil = MembershipStat.Secretary;
        Donovon = MembershipStat.RegMember;
        Armaan = MembershipStat.RegMember;
        Elliot = MembershipStat.RegMember; // Marching Band 
        JacksonM = MembershipStat.Treasurer;
        Cyrus = MembershipStat.RegMember; // sports
        Avery = MembershipStat.RegMember; // sports 
        PeterM = MembershipStat.RegMember; // sports 
        Mahdi = MembershipStat.RegMember;
        GeorgeW = MembershipStat.RegMember;



        System.out.println("Chase Williams: " + ChaseW);
        System.out.println("Saif Ali: " + Saif);


    }
}

有没有一种方法可以在 java 中创建一个计数器来计算分配给 MembershipStat.RegMember 和 MembershipStat.CoPresident 等的人数?基本上是一种告诉我有多少 Regmembers 等的方法

我认为没有办法不包装分配的右侧(或类似的)

ChaseW = add(MembershipStat.CoPresident);

add 类似于

static int[] counters = new int[MembershipStat.values().length];

static MembershipStat add(MembershipStat stat) {
  counters[stat.ordinal]++;
  return stat;
}

如有必要,移除

static MembershipStat remove(MembershipStat stat){
    counters[stat.ordinal]--;
    return stat;
}

根据您的所有需求进行调整。

public int checkFor(MembershipStat[] ms, MembershipStat check){
    int x = 0;
    for(MembershipStat m : ms){
        if(m.equals(check))x++;
    }
    return x;
}

我不确定您是如何设置名册名称的,使用 Map/HashMap 设置可能会有所帮助。 对于您的示例,它看起来有点像这样:

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;


public class Test1 {
    enum MembershipStat {CoPresident, Secretary, Treasurer, RegMember,Sponser}
    public static void main (String[] args)
    {

        final int CoPresidents = 2;



        Map<String, MembershipStat> roster = new HashMap<String, MembershipStat>();
        roster.put("ChaseW", MembershipStat.CoPresident);
        roster.put("Saif", MembershipStat.CoPresident);
        roster.put("MrLee", MembershipStat.Sponser);
        roster.put("Rahil", MembershipStat.Secretary);
        roster.put("Donovon", MembershipStat.RegMember);
        roster.put("Armaan", MembershipStat.RegMember);
        roster.put("Elliot", MembershipStat.RegMember);
        roster.put("JacksonM", MembershipStat.Treasurer);
        roster.put("Cyrus", MembershipStat.RegMember);
        roster.put("Avery", MembershipStat.RegMember);
        roster.put("PeterM", MembershipStat.RegMember);
        roster.put("Mahdi", MembershipStat.RegMember);
        roster.put("GeorgeW", MembershipStat.RegMember);

        System.out.println(checkFor(roster, MembershipStat.RegMember));


    }
    public static int checkFor(Map<String, MembershipStat> roster, MembershipStat check){
        int x = 0;
        Iterator<MembershipStat> it = roster.values().iterator();
        while(it.hasNext()){
            MembershipStat y = it.next();
            System.out.println(y);
            if(y.equals(check))
                x++;
        }
        return x;
    }
}

欢迎使用和提问! :D

我建议添加一个 Member class 来为您捕获此信息:

class Member {
    private static final EnumMap<MembershipStat, Integer> statusCount = new EnumMap<>(MembershipStat.class);
    private MembershipStat status;
    private String name;

    public Member(String name, MembershipStat status) {
        this.status = status;
        this.name = name;
        statusCount.put(status, getStatCount(status) + 1);
    }

    public static int getStatCount(MembershipStat status) {
        return statusCount.getOrDefault(status, 0);
    }
}

那么您可以添加成员为:

Member mrLee = new Member("Peter Lee", MembershipStat.Secretary);

并获取特定状态的计数:

Member.getCount(MembershipStat.Treasurer);

理想情况下,您还可以应对成员的状态变化:

public void changeStatus(MembershipStat status) {
    assert getStatCount(this.status) >= 1;
    statusCount.put(this.status, getStatCount(this.status) - 1);
    this.status = status;
    statusCount.put(this.status, getStatCount(this.status) + 1);
}