亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

合并多個 if 語句

合并多個 if 語句

呼喚遠方 2023-09-13 10:28:11
我有以下代碼,它依賴于多個不同的 if 語句。我正在為 Android 制作 Cribbage 分數計數應用程序。顯示的代碼僅適用于藍隊,但我最終為藍隊編寫的代碼也將用于紅隊和綠隊。我現在擁有的東西可以用,但它很笨重。我是 java 新手,希望獲得一些有關將代碼合并到更易于閱讀和維護的最佳實踐的指導。    if(blueTeamScore >= ENDGAMESCORE) {        String baseVictoryText = "Blue Team has won!";        TextView winningTeamTextView = (TextView) findViewById(R.id.winningTeam);        if(hasThreePlayer == false) {            winningTeamTextView.setText(baseVictoryText);            if (hasSkunk == true) {                if (redTeamScore <= 90) {                    winningTeamTextView.setText(baseVictoryText + "\nAnd Red Team got Skunked");                }            }        }        if(hasThreePlayer == true) {            winningTeamTextView.setText(baseVictoryText);            if (hasSkunk == true) {                if ((redTeamScore <= 90) && (greenTeamScore <= 90)) {                    winningTeamTextView.setText(baseVictoryText + "\nAnd Red and Green Teams got Skunked");                }                if ((redTeamScore <= 90) && (greenTeamScore >= 90)) {                    winningTeamTextView.setText(baseVictoryText + "\nAnd Red Team got Skunked");                }                if ((redTeamScore >= 90) && (greenTeamScore <= 90)) {                    winningTeamTextView.setText(baseVictoryText + "\nAnd Green Team got Skunked");                }            }        }    }我知道布爾變量不能在 switch 語句中使用(太糟糕了),但是還有其他類似的東西可以幫助集中我的代碼嗎?
查看完整描述

3 回答

?
慕容森

TA貢獻1853條經驗 獲得超18個贊

我仍然認為自己相當新,但這就是我會寫的內容。我編輯了幾次。


if (hasSkunk) {

    if (!hasThreePlayer) {

        if (redTeamScore<=90) {

            baseVictoryText += "\nAnd Red Team got Skunked";

        }

    } else {

        if ((redTeamScore <= 90) && (greenTeamScore <= 90)) {

            baseVictoryText += "\nAnd Red and Green Teams got Skunked";

        } else if (redTeamScore <= 90) {

            baseVictoryText += "\nAnd Red Team got Skunked";

        } else if (greenTeamScore <= 90) {

            baseVictoryText += "\nAnd Green Team got Skunked";

        }

    }

}

winningTeamTextView.setText(baseVictoryText);

假設您不介意更改 baseVictoryText (不是常量)。否則將其分配給其他東西并使用它


不假設“hasSkunk”意味著至少有一支球隊的得分<90,否則最后一個 else if 會變成 else ...


由于性能原因,“Else if”在理論上會更好 - 只有在其中一個為真時才會評估 if。這在這里不是問題,但如果其中一個條件是某種重型方法的結果......


像這樣的一堆 Else If 的工作方式非常類似于帶有中斷的 switch。


查看完整回答
反對 回復 2023-09-13
?
撒科打諢

TA貢獻1934條經驗 獲得超2個贊

您可以嘗試三元運算符 ?: 。上面代碼中的示例我只是簡化了某些部分。你可以嘗試其他類似的東西


        if(!hasThreePlayer) {

            winningTeamTextView.setText(hasSkunk&&redTeamScore<=90 ? baseVictoryText + "\nAnd Red Team got Skunked" : baseVictoryText);

        }

        else {

            winningTeamTextView.setText(baseVictoryText);

            if (hasSkunk) {

                if ((redTeamScore <= 90) && (greenTeamScore <= 90)) {

                    winningTeamTextView.setText(baseVictoryText + "\nAnd Red and Green Teams got Skunked");

                }

                if ((redTeamScore <= 90) && (greenTeamScore >= 90)) {

                    winningTeamTextView.setText(baseVictoryText + "\nAnd Red Team got Skunked");

                }

                if ((redTeamScore >= 90) && (greenTeamScore <= 90)) {

                    winningTeamTextView.setText(baseVictoryText + "\nAnd Green Team got Skunked");

                }

            }

        }


查看完整回答
反對 回復 2023-09-13
?
慕勒3428872

TA貢獻1848條經驗 獲得超6個贊

更干凈一點,因為只在一個地方設置 textField,不需要 == 一個布爾值,if 應該分支,因為如果一個成功,另一個就會失敗。與初始響應略有不同。


if(blueTeamScore >= ENDGAMESCORE) {

    String victoryText = "Blue Team has won!";


    if(!hasThreePlayer && hasSkunk && redTeamScore <= 90) {

        victoryText += "\nAnd Red Team got Skunked");


    }else if(hasThreePlayer && hasSkunk) {

       if (redTeamScore <= 90 && greenTeamScore <= 90) {

          victoryText +=  "\nAnd Red and Green Teams got Skunked";

       }else if (redTeamScore <= 90) {

          victoryText +=  "\nAnd Red Team got Skunked";

       }else if (greenTeamScore <= 90) {

          victoryText += "\nAnd Green Team got Skunked";

       }

    }


    TextView winningTeamTextView = (TextView) findViewById(R.id.winningTeam);

    //maybe check for null textfield here?

    winningTeamTextView.setText(victoryText);

}

但我會分解成一個函數


 if(blueTeamScore >= ENDGAMESCORE) {

    String victoryText = "Blue Team has won!";

    if(hasSkunk){

        victoryText += getSkunkText(hasThreePlayer, redTeamScore, greenTeamScore)

    }


    TextView winningTeamTextView = (TextView) findViewById(R.id.winningTeam);

    //maybe check for null textfield here?

    winningTeamTextView.setText(victoryText);

}

功能:


private String getSkunkText(boolean hasThreePlayer, int redTeamScore, int greenTeamScore){

    String skunkText  = ""

    if(!hasThreePlayer) {

        skunkText = redTeamScore <= 90 ? "\nAnd Red Team got Skunked") : skunkText;

    }else if (redTeamScore <= 90 && greenTeamScore <= 90) {

        skunkText =  "\nAnd Red and Green Teams got Skunked";

    }else if ( redTeamScore <= 90) {

        skunkText =  "\nAnd Red Team got Skunked";

    }else if (greenTeamScore <= 90) {

        skunkText = "\nAnd Green Team got Skunked";

    }

    return skunkText; 

}


查看完整回答
反對 回復 2023-09-13
  • 3 回答
  • 0 關注
  • 145 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號