0

设置新部分时,我需要跟踪计数器。例如,如果 m1 是黄铜并且我使用 setSection(Strings); 我希望它是 Brass-- 和 Strings++ 但我不确定如何使用 if statments 并且我不确定 getSection()toString() 是否可以让我获得原始部分

/**This function sets a musician's Orchestra Section. 
 @param section  is a SymphonySection indicating the musician's Orchestra Section.*/

 public void setSection(SymphonySection section) {
    this.section = section;

    if (getSection().toString().equals( "Strings" )){
        Strings--;
    }
    else if (getSection().toString().equals( "Brass" )){
        Brass--;
    }
    else if (getSection().toString().equals( "Conductor" )){
        Conductor--;
    }
    else if (getSection().toString().equals( "Percussion" )){
        Percussion--;
    }
    else if (getSection().toString().equals( "WoodWinds" )){
        WoodWinds--;
    }

    if (section.toString().equals( "Strings" )){
        Strings++;
    }
    else if (section.toString().equals( "Brass" )){
        Brass ++;
    }
    else if (section.toString().equals( "Conductor" )){
        Conductor ++;
    }
    else if (section.toString().equals( "Percussion" )){
        Percussion ++;
    }
    else if (section.toString().equals( "WoodWinds" )){
        WoodWinds ++;
    }

}
4

3 回答 3

2
  1. 您的SymphonySection类是否有一个toString返回部分名称的方法?如果不是,您需要实现它以便它返回部分名称,例如黄铜、字符串等。在此处查看如何SymphonySection类中实现
  2. 我建议使用 switch (从 Java 7 开始支持字符串)语句来整理东西,或者按照 Peter Lawrey 的建议使用地图
  3. 请在此处查看 Java 命名约定,以使您的代码更具可读性。在上述情况下,我猜Strings,Brass等是类型变量,SymphonySection因此应该有小写的第一个字符,例如strings,brassWoodWinds,这将woodWinds遵循传统的驼峰编码风格。

希望这可以帮助。

海登

于 2012-09-28T09:10:51.253 回答
1

我会为每个部分使用计数图。

private final Map<SymphonySection, Integer> count = new HashMap<>();
public void setSection(SymphonySection section) {
    if(section == this.section) return;

    count.put(this.section, count.get(this.section)-1);
    Integer prevCount = count.get(section)
    count.put(section, prevCount == null ? 1 : (prevCount+1));

    this.section = section;
}
于 2012-09-28T08:13:25.260 回答
0

-如果你有Java 7,并且你想使用基础知识,那么请使用switch.

- Java 7String支持switch cases.

于 2012-09-28T08:48:59.880 回答