繁体   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