簡體   English   中英

將 else-if 代碼更改為更簡潔的代碼

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM