2016-12-02 51 views
0

我有一個巨大的問題,我一直在努力,對於我的生活,不能得到這個權利。從我現在收集的內容來看,當我使用JOptionPanes時,我無法退出我的for循環,因爲即使代碼正好在底下,它也永遠無法到達它。如何在使用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」,我尋找的是,該代碼將通過雙方如果由於某種原因語句重複,只是不會打破。

是什麼意思發生的是,我的for循環將通過我的文本文件進行迭代,直到它找到與用戶輸入的精確匹配,如果是的話,休息。如果未找到重複項,請將新的代碼行追加到文件末尾。

它只是不工作,我不知道在哪裏可以從這裏走,所以我希望有人在這裏可以提供幫助。

如果您需要了解更多信息,那麼請讓我知道,所以我可以提供,並得到這個問題的解決。

謝謝。

回答

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

請注意,您只需要外部循環上的標籤,因爲不使用內部標籤。此外,這種結構最常見的約定是,將外部循環標記爲「外部」,然後打破外部。 – 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