【问题标题】:How can I break out of a for loop when using JOptionPanes?使用 JOptionPanes 时如何跳出 for 循环?
【发布时间】:2016-12-02 06:44:22
【问题描述】:

我有一个很大的问题,我一直在努力解决这个问题,我一生都无法解决这个问题。从我现在收集的信息来看,当我使用 JOptionPanes 时,我无法退出我的 for 循环,因为由于某种原因它永远不会到达它,即使代码就在下面。

我的代码的目标是遍历一个 .CSV 文件,用户将输入一系列输入,最值得注意的是,我正在检查重复项,如果发现重复项,那么我将继续显示JOptionPane.showMessageDialog,并在消息显示后中断for循环。

但是,我的消息对话框一直在循环,并且不会继续,所以我一直坚持我做错了什么。

这是我的代码:

JOptionPane.showMessageDialog(null, myPanel, "Edit Fruit", JOptionPane.INFORMATION_MESSAGE);

        for (row = 0; row < myEntries.size(); row++)
        {
            for (column = 0; column < myEntries.get(row).length; column++)
            {
                //If serial exists
                if (myEntries.get(row)[column].trim().equals(newSerial.getText()))
                {
                    //break loop
                    JOptionPane.showMessageDialog(null, "Serial already exists!");
                    break;
                //If the serial does not exist, write this new line to the end of the file        
                }else if (!(myEntries.get(row)[column].trim().equals(newSerial.getText())))
                {
                    System.out.println(row);
                    myEntries.add(new String[] {newSerial.getText(), dateFormat.format(newDate), newLocation.getText(), 
                    "",newAllocation, newCondition, newType.getText(), newComments.getText()});
                }

            }

如果我的文档包含“6”,并且我搜索它,此代码将出于某种原因遍历这两个 if 语句,并且不会中断。

我的意思是,我的 for 循环将遍历我的文本文件,直到它从用户输入中找到完全匹配的内容,如果是,则中断。如果未找到重复项,则将新的代码行附加到文件末尾。

它只是不起作用,我不知道从哪里开始,所以我希望这里有人可以提供帮助。

如果您需要更多信息,请告诉我,以便我提供并解决此问题。

谢谢。

【问题讨论】:

    标签: java for-loop joptionpane break


    【解决方案1】:

    如果你打算break第一个循环,你可以使用labels

    OUTER: for (row = 0; row < myEntries.size(); row++) {
        for (column = 0; column < myEntries.get(row).length; column++) {
            // If serial exists
            if (myEntries.get(row)[column].trim().equals(newSerial.getText())) {
                // break loop
                OptionPane.showMessageDialog(null, "Serial already exists!");
                break OUTER;
            // If the serial does not exist, write this new line to the end of the file
            } else if (!(myEntries.get(row)[column].trim().equals(newSerial.getText()))) {
                System.out.println(row);
                myEntries.add(new String[] { newSerial.getText(), dateFormat.format(newDate), newLocation.getText(), "", newAllocation, newCondition, newType.getText(), newComments.getText() });
            }
    
        }
    }
    

    【讨论】:

    • 请注意,您只需要外循环上的标签,因为不使用内循环。此外,此构造最常见的约定是,将外部循环标记为“OUTER”,然后中断 OUTER。
    【解决方案2】:

    您还需要一个break

    for (row = 0; row < myEntries.size(); row++)
    {
        for (column = 0; column < myEntries.get(row).length; column++)
        {
            //If serial exists
            if (myEntries.get(row)[column].trim().equals(newSerial.getText()))
            {
                //break loop
                JOptionPane.showMessageDialog(null, "Serial already exists!");
                break;
                //If the serial does not exist, write this new line to the end of the file        
            } else if (!(myEntries.get(row)[column].trim().equals(newSerial.getText())))
            {
                System.out.println(row);
                myEntries.add(new String[] {newSerial.getText(), dateFormat.format(newDate), newLocation.getText(), "",newAllocation, newCondition, newType.getText(), newComments.getText()});
            }
       }
       break; // <- This is required to break from outer loop.
    }
    

    【讨论】:

    • 非常感谢,但是,即使它确实找到了重复项,它仍然会打印该行并附加到我的文本文件中,两次。这是怎么回事,我做错了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    • 1970-01-01
    相关资源
    最近更新 更多