我对 Java 有点陌生,我无法真正理解代码中 if
语句之后需要的 break;
。如果我在 switch
关闭后不添加最后一个 break;
语句,我会得到多个具有相同标题但时间长度不同的歌曲副本。
但是,如果我添加 break;
,我只会在用户的音乐文件中获得指定歌曲的一份副本。我试图理解为什么会发生这种情况。是不是因为如果我不脱离包含 switch
的 if
语句,那么 switch 会自行重复?
try{
Scanner input = new Scanner(inFile);
//looping through user requested file of music
while (input.hasNextLine()){
//reads new line in the file
String line = input.nextLine();
String[] tokens = line.split("[,]");
// loops through list of all songs
for (int i = 0; i < allSongs.length; i++){
String nameOfSong = tokens[1];
if (allSongs[i].getTitle().equals(nameOfSong)){
String playlistTypeName = tokens[0];
switch (playlistTypeName){
case "playlist1":
playlist1.enqueue(allSongs[i]);
break;
case "playlist2":
playlist2.enqueue(allSongs[i]);
break;
case "playlist3":
playlist3.enqueue(allSongs[i]);
break;
default:
break;
}
break;
}
}
}
最佳答案
你有一个循环中的开关。
switch 主体中的 break
语句“跳”出 switch 部分。
但是该代码仍然位于一个循环中(它位于另一个循环中)。
因此,外部中断会影响“循环”的发生方式。
因此,真正的答案是退后一步,单独查看每一件事。实现这一目标的一个好方法是不要将这么多东西放入一个方法中。而是使用一种独特的方法来自行进行“切换”处理。
换句话说:您在代码中投入了太多的复杂性。现在你不知道发生了什么。
更准确地说:就您的情况而言,您使用的是错误的解决方案。含义:您真正想要做的是将一个字符串(例如“playlist1”)映射到特定对象。因此,您不必手动执行此操作,而是使用 switch 语句可以使用
Map<String, PlayList> playListsByName = new HashMap<>();
playListsByName.put("playlist1", playlist1);
...
然后你的 switch 语句消失,取而代之的是:
PlayList plist = playListsByName.get(yourToken);
if (plist != null) {
plist.enqueue(allSongs[i]);
} else {
... error handling: invalid play list token
关于java - try/catch 包含 for + if + switch 语句、break;需要在包含 switch 的 for 循环中包含 if 语句之后,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50169445/