![](/img/trans.png)
[英]How to make an if else-if test for something in a string and delete or change something
[英]Changing else-if code to something cleaner
我遵循了 else-if 代碼,我真的對它所需的行的大小感到惱火,所以我在想是否有一些更合適的方法來做到這一點,它會更干凈、更快?
if (dialogResult == 0) {
System.out.println("Yes option to try again!");
if (level.equals(lp.LEVEL1.getLevelName())) {
System.out.println(lp.LEVEL1.getLevelName());
level = lp.LEVEL2.getLevelName(); // set level
totalBall = lp.LEVEL2.getBallCount();
numberOfExplodes = lp.LEVEL2.getBallExplosion();
} else if (level.equals(lp.LEVEL2.getLevelName())) {
System.out.println(lp.LEVEL2.getLevelName());
level = lp.LEVEL3.getLevelName(); // set level
totalBall = lp.LEVEL3.getBallCount();
numberOfExplodes = lp.LEVEL3.getBallExplosion();
} else if (level.equals(lp.LEVEL3.getLevelName())) {
System.out.println(lp.LEVEL3.getLevelName());
level = lp.LEVEL4.getLevelName(); // set level
totalBall = lp.LEVEL4.getBallCount();
numberOfExplodes = lp.LEVEL4.getBallExplosion();
} else if (level.equals(lp.LEVEL4.getLevelName())) {
System.out.println(lp.LEVEL4.getLevelName());
level = lp.LEVEL5.getLevelName(); // set level
totalBall = lp.LEVEL5.getBallCount();
numberOfExplodes = lp.LEVEL5.getBallExplosion();
} else if (level.equals(lp.LEVEL5.getLevelName())) {
System.out.println(lp.LEVEL5.getLevelName());
level = lp.LEVEL6.getLevelName(); // set level
totalBall = lp.LEVEL6.getBallCount();
numberOfExplodes = lp.LEVEL6.getBallExplosion();
} else if (level.equals(lp.LEVEL6.getLevelName())) {
System.out.println(lp.LEVEL6.getLevelName());
level = lp.LEVEL7.getLevelName(); // set level
totalBall = lp.LEVEL7.getBallCount();
numberOfExplodes = lp.LEVEL7.getBallExplosion();
} else if (level.equals(lp.LEVEL7.getLevelName())) {
System.out.println(lp.LEVEL7.getLevelName());
level = lp.LEVEL8.getLevelName(); // set level
totalBall = lp.LEVEL8.getBallCount();
numberOfExplodes = lp.LEVEL8.getBallExplosion();
} else if (level.equals(lp.LEVEL8.getLevelName())) {
System.out.println(lp.LEVEL8.getLevelName());
level = lp.LEVEL9.getLevelName(); // set level
totalBall = lp.LEVEL9.getBallCount();
numberOfExplodes = lp.LEVEL9.getBallExplosion();
}
...
我認為 switch 在這里可以正常工作,但我也想聽聽其他選擇。
更新:這是我的課程: lp 屬於 Balls 類,它是 enum 並且在它的構造函數中有 3 個參數:
public enum BallCount {
LEVEL1(5,1,"Level 1"),
LEVEL2(10,2,"Level 2"),
LEVEL3(15,4,"Level 3");
制作LEVEL1, LEVEL2, LEVEL3....
或 `lp' 來實現以下方法:
/**
* Gets Level enum from name.
*/
public static Level getLevelFromName(String);
/**
* Gets next level.
* Each level may either keeps reference to the next level or
* using enum cardinal number can get the next number.
*/
public Level getNextLevel();
然后你的 if-then 被減少到沒有條件地跟隨一個/兩個班輪。
Level nextLevel = Level.getLevelFromName(level).getNextLevel();
level = lp.LEVEL6.getLevelName(); // set level
totalBall = lp.LEVEL6.getBallCount();
numberOfExplodes = lp.LEVEL6.getBallExplosion();
您可以用多態替換條件。 基本上,這意味着您將 if 塊中的實現移動到每個對象上的相同函數中。 然后,只需調用該函數,就會運行正確的代碼。
您可以查看https://sourcemaking.com/refactoring/replace-conditional-with-polymorphism以獲得更詳盡的解釋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.