2016-12-02 9 views
0

У меня есть огромная проблема, над которой я работаю и на всю жизнь, не могу понять это правильно. Из того, что я собрал на данный момент, я не могу выйти из цикла for, когда я использую JOptionPanes, потому что по какой-то причине он никогда не достигнет его, даже если код находится под ним.Как я могу вырваться из цикла for при использовании JOptionPanes?

Цель моего кода - перебирать файл .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», и я ищу, что этот код будет перебирать и если заявления по какой-то причине, а просто не сломается.

Что должно произойти, цикл my будет проходить через мой текстовый файл до тех пор, пока он не найдет точное совпадение с вводом пользователей, и если это так, перерыв. Если дубликат не найден, добавьте новую строку кода в конец файла.

Это просто не работает, и я не уверен, куда идти отсюда, поэтому я надеюсь, что кто-то здесь может помочь.

Если вам нужна дополнительная информация, пожалуйста, сообщите мне, чтобы я мог предоставить и устранить эту проблему.

спасибо.

ответ

3

Если вы намерены 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() }); 
     } 

    } 
} 
+1

Обратите внимание, что вам нужна только метка на внешнем контуре, поскольку внутренний не используется. Кроме того, наиболее распространенным соглашением для этой конструкции является маркировка внешнего цикла «OUTER», а затем разрыв OUTER. – mtj

1

Вам нужен еще один 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. 
} 
+0

Спасибо вам большое, однако, даже если он не найдет дубликат, он по-прежнему печатает строку и дописывает мой текстовый файл, дважды. Что с этим связано, я что-то делаю неправильно? – juiceb0xk