2012-01-07 18 views
2

我一直在創造一個程序,就是添加搜索中刪除的預訂等等 小時後我finaly以爲我是在進步,但是當我刪除預訂我的程序找到正確的預訂返回該預訂的正確信息,但刪除不同的預訂。刪除數據的字符串從數組列表

我已經在一個zip附加的文件,就好像我顯示他們,他們會佔用大量的屏幕空間。該項目已取得BlueJay: hostelgreamenew.zip 18.4 KB

爲decleration代碼和對象添加到我的數組列表

public Hostel(String hostelName) 
{ 
    this.hostelName = "Newcastle Hostel"; 
    bookings = new ArrayList<Booking>(); 
} 
public String getHostelName() 
{ 
    return hostelName; 
} 
public String addBooking(String roomID, String roomType, String guest) 
{ 
    if (roomID.equals("")) 
     return "Error Please Entre Room ID"; 

    else if (roomType.equals("")) 
     return "Error Please Entre Room Type"; 

    else if (guest.equals("")) 
     return "Error Please Entre Guest Name"; 

    bookings.add(new Booking(roomID,roomType,guest)); 
    return "Room " + roomID + " " + roomType + " Has Been Booked For " + guest; 
} 

這是從我的宿舍類

public String deleteBooking(String roomID) 
{ 
    int index = 0; 
    for (Booking s : bookings) 
    { 
     if (s.getRoomID().equals(roomID)) 
     { 
      //return "Room ID: " + roomID + " Room Type: " + s.getRoomType() + " Guest: " + s.getGuest(); 
      String deleteMessage = "Room ID: " + roomID + " Room Type: " + s.getRoomType() + " Guest: " + s.getGuest(); 


      int response = JOptionPane.showConfirmDialog(null, deleteMessage, "Confirm Delete", 
      JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); 
      if (response == JOptionPane.NO_OPTION) 
      { 
      } else if (response == JOptionPane.YES_OPTION) 
      { 
      bookings.remove(index);  
      } 
      index++; 

     } 

    } 
    return " Cannot find room"; 
} 

這是取自取我的GUI類

else if (item.equals("Cancel Booking")) 
    { 
     newBookingButton.setEnabled(false); 
     cancelBookingButton.setEnabled(false); 
     String roomID = JOptionPane.showInputDialog(this, "Enter a room ID", "Delete a Booking", JOptionPane.QUESTION_MESSAGE); 
     output.setText(hostel.deleteBooking(roomID)); 
     newBookingButton.setEnabled(true); 
     cancelBookingButton.setEnabled(true); 
    } 

任何附加代碼n eeded要麼要求或存在以上感謝

+5

這裏沒有人會下載zip文件,然後讀取所有的源代碼。請製作一個**最小**測試案例來說明問題(請參閱http://sscce.org)。 – 2012-01-07 17:34:52

+1

修改的相關代碼現在顯示 – 2012-01-07 17:45:13

+0

@HxMGraeme:請告訴我你的程序的起點,意思是說我必須在我的主要方法中寫入什麼來啓動它。而已 。 Regards – 2012-01-07 18:12:44

回答

2

鏈接的完整副本,如果當前房間的房間ID等於房間要刪除的ID您僅環遞增索引。該行

index++; 

應該出if塊。

編輯:

的另一個問題是,你要刪除元素的集合,而在它迭代。這隻有在您使用迭代器迭代集合時纔可能,並使用迭代器的remove方法刪除當前元素。請注意,即使有可能,由於您刪除了給定索引處的元素,因爲您剛剛刪除了此索引處的元素,所以索引不應該增加。

使用迭代器的示例:

for (Iterator<Booking> it = bookings.iterator(); it.hasNext();) { 
    Booking b = it.next(); 
    if (...) { 
     it.remove(); 
    } 
} 
+0

當我採取索引++;到}下面。我按確認刪除,整個程序被錯誤淹沒,我把它移動了。即時通訊不知道什麼是做錯了 – 2012-01-07 17:56:02

+0

看到我的編輯。嘗試隨機動作希望它能解決問題通常不是一個好策略。嘗試思考你的算法的作用。 – 2012-01-07 18:03:02

+0

非常感謝我看看有一個遊戲,看看我是否可以用它來做我的程序。只是用完了時間 – 2012-01-07 18:08:36

1

基本上當s.getRoomID().equals(roomID)爲真您if塊執行,從而不管你有什麼index遞增所述用戶的響應。那麼,這樣做:

if (s.getRoomID().equals(roomID)) 
{ 
    //your code 
} 

index++ 
+0

Iv在if語句之外的索引++,但它似乎沒有做出差異,現在當我按OK確認bookins.remove(index);該應用程序顯示的窗口中有許多錯誤代碼的紅線代表任何想法?謝謝 – 2012-01-07 18:01:52

0

我只是看着你的代碼,好像你正試圖遍歷集合,並在同一時間修改值。使用增強的for循環,這樣的事情會產生錯誤,所以不必使用增強型for循環,而必須使用正常for循環。所以我修改了你的deleteBookings方法以適應相應的變化。

public String deleteBooking(String roomID) 
{ 
    //for (Booking s : bookings) 
    for (int i = 0; i < bookings.size(); i++) 
    { 
     Booking s = bookings.get(i); 
     if (s.getRoomID().equals(roomID)) 
     { 
      //return "Room ID: " + roomID + " Room Type: " + s.getRoomType() + " Guest: " + s.getGuest(); 
      String deleteMessage = "Room ID: " + roomID + " Room Type: " + s.getRoomType() + " Guest: " + s.getGuest(); 

      //int r = JOptionPane.showOptionDialog,null("Are you sure you would like to delete the following \n" 
      //+ "deleteMessage", 
      //"Delete a booking", 
      //JOptionPane.YES_NO_OPTION, 
      //JOptionPane.QUESTION_MESSAGE,null,null,null); 

      //if (r == JOptionPane.YES_OPTION) { 
      // bookings.remove(index); 
      //} 
      //if (r == JOptionPane.NO_OPTION){ 
      //  return "Booking Was Not Canceled"; 
      // } 
      int response = JOptionPane.showConfirmDialog(null, deleteMessage, "Confirm Delete", 
      JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); 
      if (response == JOptionPane.NO_OPTION) 
      { 
      } else if (response == JOptionPane.YES_OPTION) 
      { 
      //bookings.remove(index);  
      bookings.remove(i);  
      return deleteMessage + " has been DELETED."; /*I did this.*/ 
      }        
     } 

    } 
    return " Cannot find room"; 
} 

而且,這種

bookings.remove(i); 

後,您忘了返回類似

return deleteMessage + " has been DELETED."; /*I did this.*/ 

既然你沒有回報成功完成一個字符串,這就是爲什麼它返回「的原因不能找到空間「,即使成功刪除後也是如此。其餘的代碼是完美的。 希望可以解決您的查詢。

Regards