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

标签 java if-statement switch-statement break

我对 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/

相关文章:

java - 在 Android 应用程序中,我需要 Pdfviewer Jar 来查看 pdf,任何人都可以帮助我吗?

java - Java 更新后 Eclipse 中出现 FileNotFoundException

list - 序言; if 和(停止)递归

c - 为什么这个 else block 被执行了两次?

C++,得到一个无限循环

c - 是否有与 C Fall Through 开关等效的 VB .NET?

java - case 表达式必须是 static final int 的常量表达式?

java - 允许 App Engine 服务帐户编辑日历

java - 如何增加使用 for 循环创建的 jlabel 变量名称?

R if语句具有多个条件和多个结果