2015-09-07 106 views
2
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有等如何創建計數枚舉類型的計數器?

回答

-1

適應這個您的所有需求。

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

隨意使用的要求quesions! :d

1

我不認爲有沒有包裹分配新建分配FY(或類似)的右側的方式

ChaseW = add(MembershipStat.CoPresident); 

其中添加是一樣的東西

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

這似乎工作得很好,但是,如果他們要從列表中刪除一個人呢?也許刪除函數來補充添加? – Gamma2626

+0

可能有意義,取決於用例。不應該太難實現 - 與'add'唯一的區別應該是'--'而不是'++' –

0

我建議增加一個Member類抓住了這個信息,供各位:

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

理想情況下,您還可以應對元件的狀態變化rs:

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