gpt4 book ai didi

java - try/catch 包含 for + if + switch 语句、break;需要在包含 switch 的 for 循环中包含 if 语句之后,为什么?

转载 作者:行者123 更新时间:2023-11-30 02:10:45 24 4
gpt4 key购买 nike

我对 Java 有点陌生,我无法真正理解代码中 if 语句之后需要的 break; 。如果我在 switch 关闭后不添加最后一个 break; 语句,我会得到多个具有相同标题但时间长度不同的歌曲副本。

但是,如果我添加 break;,我只会在用户的音乐文件中获得指定歌曲的一份副本。我试图理解为什么会发生这种情况。是不是因为如果我不脱离包含 switchif 语句,那么 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com