Java中switch-case的语法

时间:2015-04-14 17:59:11

标签: java syntax switch-statement

我第一次在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;
}

6 个答案:

答案 0 :(得分:1)

在每个指令后使用break语句。

答案 1 :(得分:1)

您的case语句需要从0开始,因为您正确地观察到,i从零开始。但是,这似乎是您遇到的问题中最少的(除非这只是使用switch case)的练习。

在这种情况下你根本不需要switch case。另外,您永远不会在数组中创建任何对象,因此每次尝试在特定索引处访问数组时,您都会获得空引用异常。以下就足够了:

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的案例下的每个案例陈述,例如当i == 0时,将执行所有案例陈述。

答案 2 :(得分:0)

你正在做很多不必要的工作。尝试

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;
}

答案 3 :(得分:0)

您可以选择填充数组,但如果您的任务要求您只使用switch,那么请从case 0而不是1开始,因为0是&#34;第一个&#34; case你遇到了。

答案 4 :(得分:0)

你真的需要在这里切换吗? for循环就足够了。

切换只是将执行移动到案例行,并忽略下一次的另一个案例。所以当你给i = 1切换时,所有的case语句都会被执行。您可以使用break;

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

答案 5 :(得分:0)

您的代码中的错误很少:

1)你没有案例0 - 所以没有使用它。建议总是使用默认情况。

2)每个案件都应该休息一下;否则以下所有情况也会执行。例如,对于案例9,这些案例被称为9和10.对于案例1,所有10个案例都被调用。 (但是对于你的代码中的case 0,没有被调用)。

3)您保留了10个团队的阵列,但您没有填充此阵列的对象。你的代码会产生空指针异常。