簡體   English   中英

Java中的大小寫語法

[英]Syntax for switch-case in Java

我第一次在Java中使用switch case,但對語法不確定。 假設setTeamName函數可以正常工作,下面的函數會使數組中的所有團隊都使用占位符String作為名稱,還是我應該從案例0開始:因為我從0開始?

public static Team[] makeTeams(){
    Team[] teams = new Team[10];
    for(int i = 0; i < teams.length; i++){
        switch(i){
            case 1: teams[0].setTeamName("Arsenal");
            case 2: teams[1].setTeamName("Arsenal");
            case 3: teams[2].setTeamName("Arsenal");
            case 4: teams[3].setTeamName("Arsenal");
            case 5: teams[4].setTeamName("Arsenal");
            case 6: teams[5].setTeamName("Arsenal");
            case 7: teams[6].setTeamName("Arsenal");
            case 8: teams[7].setTeamName("Arsenal");
            case 9: teams[8].setTeamName("Arsenal");
            case 10: teams[9].setTeamName("Arsenal");
        }
    }
    return teams;
}

在每條指令后使用break語句,以防萬一。

您的case語句必須從0開始,因為正如您正確地觀察到的那樣, i從零開始。 但是,這似乎是最少的問題(除非這只是使用switch case一種練習)。

在這種情況switch case ,您根本不需要switch case 另外,您永遠不會在數組中創建任何對象,因此,每次嘗試在特定索引處訪問數組時,您都將獲得null引用異常。 以下內容就足夠了:

Team[] teams = new Team[10];
for (int i = 0; i < teams.length; i++) {
    teams[i] = new Team();
    teams[i].setTeamName("Arsenal");
}

您在原始示例中實際上得到的是一個反模式示例,即Loop-switch sequence 如果您希望原始示例使用此反模式正常工作(僅用於教育目的),則需要添加break; 語句,以確保您的案例語句不會出現以下情況:

Team[] teams = new Team[10];
for (int i = 0; i < teams.length; i++) {
    teams[i] = new Team();
    switch (i) {
        case 0: teams[0].setTeamName("Arsenal"); break;
        case 1: teams[1].setTeamName("Arsenal"); break;
        case 2: teams[2].setTeamName("Arsenal"); break;
        case 3: teams[3].setTeamName("Arsenal"); break;
        case 4: teams[4].setTeamName("Arsenal"); break;
        case 5: teams[5].setTeamName("Arsenal"); break;
        case 6: teams[6].setTeamName("Arsenal"); break;
        case 7: teams[7].setTeamName("Arsenal"); break;
        case 8: teams[8].setTeamName("Arsenal"); break;
        case 9: teams[9].setTeamName("Arsenal"); break;
    }
}

沒有中斷,將評估與i匹配的條件下的每個case語句,例如,當i == 0 ,將執行所有case語句。

您正在做很多不必要的工作。 嘗試

public static Team[] makeTeams(){
    Team[] teams = new Team[10];
        for(int i = 0; i < teams.length; i++){
            teams[i] = new Team();
            teams[i].setTeamName("Arsenal");
        }
    return teams;
}

您確實可以選擇填充數組,但是如果您的任務要求您僅使用switch則從case 0而不是1開始,因為0是您遇到的“第一個” case

您真的需要在這里切換嗎? for循環就足夠了。

切換只是將執行移至案例行,下一次忽略另一個案例。 因此,當您給i = 1切換時,將執行所有case語句。 您可以使用break;來防止它break;

switch (i) {
    case 1: 
        teams[0].setTeamName("Arsenal");
        break;
    case 2: 
        teams[1].setTeamName("Arsenal");
        break;
}

您的代碼中幾乎沒有錯誤:

1)您沒有大小寫0,因此不使用它。 建議始終使用默認情況。

2)每種情況都應以休息的方式結束; 否則,以下所有情況也將執行。 例如,對於案例9,這些案例稱為9和10。對於案例1,所有10個案例都已被調用。 (但對於代碼中的情況0,則不會調用)。

3)您保留了由10個團隊組成的數組,但沒有在該數組中填充對象。 您的代碼將產生空指針異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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