我第一次在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;
}
答案 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个团队的阵列,但您没有填充此阵列的对象。你的代码会产生空指针异常。