如何创建一个计算枚举类型的计数器?
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);
}
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);
}