If else loop array [Java (Ej nödvändigt)]

Permalänk

If else loop array [Java (Ej nödvändigt)]

(Tror inte kunskap om java behövs)
Hej,
Jag har ett litet problem, ("Not: Koden var för sig fungerar som dem ska"), principen är ganska enkel skriv in input från user jämför med array om lika skriv ej till array om ej lika skriv till array. Som jag skrivit ner koden här jämför den input med array[0] och ingen annan i arrayen vilket givetvis då lägger till sist i arrayen som den inte ska.

Ja, min andra for loop är kommenterad för att den istället för att lägga sist i arrayen ersätter array[0] så det fungerar ju inte. Breaks är där dem är just för att det inte ska bli massa oändligt med text. Dem två sista breaks är egentligen inte nödvändiga tar jag bort dem så går den igenom arrayen en gång till så om det matchar Array[1] så skrivs "Har sett" ut igen men det läggs ju fortfarande in sist i arrayen från första loopen. Okej jag förstår att om jag skriver test input för array[1] så första loopen jämför den ju egentligen inte med array[1] utan endast array[0] på det viset är det rätt men ändå fel.

Vad saknar jag för att den ska gå igenom hela arrayen innan den börjar skriva nytt till arrayen? Det kan inte vara en stor skillnad mot den jag redan gjort.

for(DokAct dokact:settFilm){ //for(antal = 0; antal <= settFilm.length; antal++){ if(settFilm != null && actfNamn.equalsIgnoreCase(dokact.getActFNa())){ System.out.println("Har sett"); break; }else{ DokAct pers = new DokAct(actfNamn, acteNamn, filmAct, dat); settFilm[antal] = pers;//original antal++; //räkna if(antal >=50) { System.out.println("Filmer överstiger arrray"); antal--; break; }break; } }break;

Permalänk
Hedersmedlem

Jag föreslår en bool-variabel som du använder för att indikera om du hittat filmen. Börja med att sätta denna variabel till false. Loopa igenom alla filmer. Hittar du samma film sätter du variabeln till true. Efter loopen kollar du din variabel. Är den fortfarande false lägger du till filmen i listan. Om det är så du tänkt funktionaliteten.

Ytterligare en annan lösning kan vara att bryta ut koden som kollar hela arrayen till en metod som returnerar true eller false. Då kan du göra return true direkt när du hittar filmen och annars return false efter loopen.

Visa signatur

Använd gilla för att markera nyttiga inlägg!

Permalänk
Medlem

Förstår inte riktigt vad du är ute efter. Ser ingenstans att du "skriver något till en array" och dylikt.

Men såhär hade jag gjort en metod som jämför två strängar (t.ex två filmer), går även från din ursprungliga metod att loopa igenom alla filmer och att den varje gång kallar på min metod.

Ps - det är en "psuedolösning" så du får ändra argument och dylikt.
Om de har olika längd så kan de inte vara lika och den avbryter då direkt. Annars loopar den igenom fram tills att någon bokstav inte är lika. Om den har klarat hela loopen utan att avbryta så vet vi att då kan vi returnera True.

metod cmpArray(arg1, arg2) { if(arg1.length != arg2.length) return False for(int i=0; i<arg1.length-1; i++) if(arg1[i] != arg2[i]) return False return True }

Visa signatur

10700K | NVIDIA RTX 3080