3 svar
156 visningar
Borisgun 12 – Fd. Medlem
Postad: 13 jan 2018 15:51

Vill förhindra objekt med samma namn att läggas till i en lista

Data it = new Data(Idtf.getText(), Nametf.getText(), Yeartf.getText(), Integer.parseInt(Pricetf.getText()));

for(Data dat : movieArray){
if(Idtf.getText().contains(dat.getId())){
JOptionPane.showMessageDialog(null, "The entered id is unavailble!");

} else {
movieArray.add(it);
display();
break;
}

}
break;

Idtf är variabelnamnet på min textfält, där användaren matar in ett id.

Koden ovan kollar när en användaren lägger till ett objekt i en arraylist att det namnet de anger inte redan finns i listan. Min kod funkar, men bara för det första objektet i listan. Det vill säga, det första objektet i listan heter "Pulp" och  användaren kan inte  lägga till ett till objekt med det namnet utan att Joption meddelandet körs. Men de andra objekten efter "Pulp" funkar det inte på.

Har jag missat en loop någonstans? eller tänker jag inte ens rätt?

SeriousCephalopod 2696
Postad: 13 jan 2018 16:34 Redigerad: 13 jan 2018 16:36

Jag förstår inte funktionen hos else-satsen, och är i alla fall ett klart problem i koden.

Jag gissar att dess funktion skulle vara att om for-loopen kör igenom alla i movieArray utan att hitta användarens val så ska användarens val accepterar och läggas till i listan men som det är nu så ligger denna sats inuti foorloopen och körs direkt i samma stund som koden stöter på ett element i listan som inte har samma namn som det nya objektet, och än värre och körs därefter en break-sats avslutar foorloopen. Det knasiga är att koden inte ens stoppar dubbletter från att adderas till listan. Koden kan egentligen endast följa två spår

1. Texten finns i första posten i listan i vilket fall man får ett felmeddelande men vartefter foor-loopen inte bryts så den rullar över till att jämföra med nästa element i listan och om det finns ett enda element i listan som inte är input-texten så kommer objektet att lägga till i listan. Dvs: Om det finns ett element i listan som inte är iputtexten så kommer inputtexten att läggas till listan oavsett om den fanns sen tidigare.

2. Texten finns inte i första posten i vilket fall koden lägger till elementet i listan och bryter foorloppen (dvs foorloopen körs bara en enda gång)

Dvs koden hindrar aldrig dubbletter från att skapas... (såsom jag läser den)

Fundera på lösningar själv en stund. Jag skulle bryta ner problemet i två delar med att först skapa kod som producerar en bool isAlreadyInList och först därefter köra en if-sats om vad som ska göras beroende på om koden finns i listan eller ej. 

Borisgun 12 – Fd. Medlem
Postad: 13 jan 2018 17:23

Jag testade att skriva: 

Data it = new Data(Idtf.getText(), Nametf.getText(), Yeartf.getText(), Integer.parseInt(Pricetf.getText()));

for (Data dat : movieArray){

if(movieArray.contains(Idtf.getText())){

jOptionpane.showmessagedialog(null, "The id is unavailable")

}else {

movieArray.add(it);
display();

}

break;

}

Nu kollar den inte ens den första positionen utan lägger till det användaren matar in även om id:en finns. 

Borisgun 12 – Fd. Medlem
Postad: 13 jan 2018 17:40

nvm, jag löste det nu.

Tack ändå!

Svara
Close