2014-10-02 113 views
0

取决于我的比赛完成水平的百分比,我将显示一些消息,我编了这个伪代码,它可能不起作用只是为了让你明白。游戏得分简单alghoritm

那会是什么做的“亲”的方式下...

if (successPercent == 100) 
     successMessage = "OUTSTANDING"; 
    else if (successPercent < 100 && successPercent > 80) 
     successMessage = "EXCELENT"; 
    else if (successPercent < 100 && successPercent > 60) 
     successMessage = "VERY GOOD"; 
    else if (successPercent < 100 && successPercent > 40) 
     successMessage = "GOOD"; 
    else if (successPercent < 100 && successPercent > 10) 
     successMessage = "AVERAGE"; 
    else if (successPercent > 0 && successPercent < 10) 
     successMessage = "BAD"; 
    else if (successPercent == 0) 
     successMessage = "TERRIBLE"; 
+0

其刚刚好,去了! – 2014-10-02 09:33:02

+1

如果'successPercent'始终为'100' *或更少*,则可以丢弃所有'successPercent <100'部分。如果它*可能最终超过100,比如说因为四舍五入或类似的情况,将第一行改为if(successPercent> = 100)。 – usr2564301 2014-10-02 09:35:47

+0

有你的上帝有关游戏结果的一些历史统计数据吗? – Zany 2014-10-02 09:37:23

回答

3

你不需要"successPercent < 100"部分每一次,因为你只能得到下一否则,如果在当前如果不是这样。

if (successPercent == 100) 
     successMessage = "OUTSTANDING"; 
    else if (successPercent > 80) 
     successMessage = "EXCELENT"; 
    else if (successPercent > 60) 
     successMessage = "VERY GOOD"; 
    else if (successPercent > 40) 
     successMessage = "GOOD"; 
    else if (successPercent > 10) 
     successMessage = "AVERAGE"; 
    else if (successPercent!=0 && successPercent < 10) 
     successMessage = "BAD"; 
    else if (successPercent == 0) 
     successMessage = "TERRIBLE"; 
+3

缺少'successPercent == 10'的情况(我知道这也是在问题中,但这就是为什么OP要求专业的方式)。 – 2014-10-02 09:44:18

+2

此外,通过此代码,您永远不会收到“TERRIBLE”消息,因为它始终与“<10”匹配,即“BAD”。 – ZeroOne 2014-10-02 09:46:31

2

我会用所有可能的分数创建一个枚举。然后,您可以调用静态方法getGameScore,通过所有游戏分数,直到找到与给定游戏内容匹配的游戏分数。这样可以避免大量重复的代码,并且所有这些代码都不容易读取代码。

根据你想要做的分数不在正确的范围内,你需要做一些比我写的东西还要多的东西,如果你输入-1或者101这样的分数,它会返回空引用。

/** 
* Enum representing all possible game scores. 
* Each game score has a lower limit and upper limit. 
*/ 
public enum GameScore { 
    OUTSTANCING(100, 100), 
    EXCELLENT(80, 99), 
    VERY_GOOD(60, 79), 
    GOOD(40, 59), 
    AVERAGE(10, 39), 
    BAD(1, 9), 
    TERRIBLE(0, 0) 
    ; 

    // The max of the range for this GameScore 
    private final Integer min; 
    // The min of the range for this GameScore 
    private final Integer max; 

    /** 
    * Constructs a gameScore type by specifying the range. 
    * @param min 
    * The minimum of the range. 
    * @param max 
    * The maximum of the range. 
    */ 
    private GameScore(final Integer min, final Integer max) { 
    this.min = min; 
    this.max = max; 
    } 

    /** 
    * Searches a game score based on a given score. 
    * @param score 
    * The score for which a GameScore is searched for. 
    * @return 
    * Returns the first GameScore that matches the given score. This means that 
    * the given score falls in the range of the GameScore. 
    * Will return null if no matching GameScore is found. 
    */ 
    public static GameScore getGameScore(final Integer score) { 
    for(GameScore gameScore : values()) { 
     if(score >= min && score <= max) { 
     return gameScore; 
     } 
    } 
    return null; 
    } 
0

您可以使用一个哈希表:

声明一个类变量:

Map<Integer,String> map; 

初始化一次:

map = new HashMap<Integer,String>(); 
map.put(0,"TERRIBLE"); 
map.put(1,"BAD"); 
map.put(2,"AVERAGE"); 
map.put(3,"AVERAGE"); 
map.put(4,"GOOD"); 
map.put(5,"GOOD"); 
map.put(6,"VERY GOOD"); 
map.put(7,"VERY GOOD"); 
map.put(8,"EXCELLENT"); 
map.put(9,"EXCELLENT"); 
map.put(10,"OUTSTANDING"); 

在需要时获得得分字符串:

successMessage = map.get((successPercent-10)/10+1); 
1

你可以试试这个方法

if (successPercent == 100) 
     successMessage = "OUTSTANDING"; 
    else if (successPercent > 80) 
     successMessage = "EXCELENT"; 
    else if (successPercent > 60) 
     successMessage = "VERY GOOD"; 
    else if (successPercent > 40) 
     successMessage = "GOOD"; 
    else if (successPercent > 10) 
     successMessage = "AVERAGE"; 
    else if (successPercent!=0&&successPercent <= 10) 
    //needs both condition since successPercent==0 is also 
            valid successPercent <=10 
     successMessage = "BAD"; 
    else if (successPercent == 0) 
     successMessage = "TERRIBLE";