2012-01-07 3 views
2

J'ai créé un programme qui consiste à ajouter des suppressions de recherche, etc ... Après des heures, j'ai fini par penser que je progressais mais quand je supprime une réservation, mon programme trouve la bonne réservation renvoie les informations correctes pour cette réservation, mais supprime une réservation différente. J'ai attaché les fichiers dans un zip comme si je les ai affichés ils prendraient beaucoup d'espace sur l'écran. Le programme a été fait dans bluejay: hostelgreamenew.zip 18.4 KBSuppression d'une chaîne de données de la liste des matrices

code

pour decleration et l'ajout d'objets dans ma liste de tableau

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; 
} 

Ceci est pris de ma classe auberge

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"; 
} 

cela est pris de ma classe 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); 
    } 

Tout code additionnel n eeded demande ou il y a une copie complète dans le lien ci-dessus merci

+5

Personne ici ne va télécharger un fichier zip, puis lire tout votre code source. Veuillez créer un cas de test ** minimal ** illustrant le problème (voir http://sscce.org). –

+1

Révisé Code Relevent Maintenant affiché –

+0

@HxMGraeme: S'il vous plaît dites-moi le point de départ de votre programme, dire ce que je dois écrire dans ma méthode principale pour commencer cela. C'est tout . Salutations –

Répondre

2

Votre boucle n'incrémente l'index que si l'ID de pièce de la pièce actuelle est égal à l'ID de la pièce à supprimer. La ligne

doit être en dehors du bloc if.

EDIT:

L'autre problème est que vous essayez de supprimer des éléments d'une collection tout en itérer sur elle. Cela n'est possible que si vous utilisez un Iterator pour parcourir la collection et utilisez la méthode remove de l'itérateur pour supprimer l'élément en cours. Notez que même si c'était possible, puisque vous supprimez l'élément à l'index donné, l'index ne doit pas être incrémenté puisque vous venez de supprimer l'élément à cet index.

Exemple d'utilisation d'un itérateur:

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

Quand je prends l'indice ++; au} ci-dessous. je presse confirmer supprimer et le programme entier est inondé d'erreurs hense je l'ai déplacé vers le haut. je ne suis pas sûr de ce que j'ai mal fait –

+0

Voir mes modifications. Essayer des mouvements aléatoires en espérant qu'il résoudra un problème n'est généralement pas une bonne stratégie. Essayez de penser à ce que fait votre algorithme. –

+0

Merci bien il faut regarder dans un jeu voir si je peux l'utiliser pour mon programme. Juste à court de temps –

1

Fondamentalement quand s.getRoomID().equals(roomID) est vrai votre bloc if est exécuté alors peu importe quelle est la réponse de l'utilisateur de votre index est incrémentée. Alors, faites ceci:

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

index++ 
+0

Iv pris l'index ++ en dehors de l'instruction if mais il ne semble pas avoir fait de différence maintenant quand j'appuie sur ok pour confirmer le bookins.remove (index); l'application montre une fenêtre avec beaucoup de lignes rouges de code d'erreur des idées? Merci –

0

Je viens de regarder dans votre code, et semble que vous essayez de parcourir une collection et comment modifier les valeurs en même temps. Avec une amélioration pour la boucle, de telles erreurs donnent des erreurs, donc au lieu d'utiliser la boucle for for améliorée, vous devez utiliser une boucle for normale. J'ai donc modifié votre méthode deleteBookings pour le changement correspondant.

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"; 
} 

De plus, après cette

bookings.remove(i); 

Vous avez oublié de retourner quelque chose comme

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

Puisque vous ne parvenez pas à renvoyer une chaîne à la réussite, c'est la raison pour laquelle il retourne « Impossible trouver de la place. ", même après une suppression réussie. Le reste du code est parfait. Hope qui pourrait résoudre votre requête.

Cordialement

Questions connexes