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