2012-01-07 20 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