2 svar
151 visningar
jade.20 4
Postad: 3 apr 2023 08:51

problem med kontroll i arraylist

Jag har svårt att förstå vad denna kod betyder. Vad betyder "String str "? Är det en vanlig string?Och vad har i variabeln för betydelse i koden? Vad är alltså syftet med i? 

Bakgrund: Detta är ett superhjälte spel där det finns en supervapen Klass och ett supervapen klass. I spelet kan man lägga till vapen och använda vapen. Tanken är att det ska finnas en metod som kontrollerar om det finns ett vapen i arraylist (häftigaVapen) som har samma sträng som det vapen som användaren vill lägga till i metoden "läggTillVapen". Det får alltså inte finnas två vapen av samma namn i arraylisten.

public boolean harVapen(String str) {
for(int i = 0; i < häftigaVapen.size(); i++) { 
if(häftigaVapen.get(i).getNamn().equals(str)) { 
return true;
}
}

return false;

CurtJ 1200
Postad: 3 apr 2023 09:51 Redigerad: 3 apr 2023 09:52

Hela koden är en metod, dvs en isolerad koddel som anropas från andra ställen i koden. Konceptet kallas funktion i andra språk. När man anropar metoden så skall man göra det med en parameter str som är en sträng (av klassen String som är inbyggd i java). Metodens syfte, om man ska gissa baserat på namnet, är att undersöka om ett visst vapen med namnet som angivits som parameter finns i arsenalen häftigaVapen. 

I koden loopar man igenom (for-loopen) alla vapen i häftigaVapen. Det gör man med 

for (int i = 0; i < häftigaVapen.size(); i++) {

}

den innebär att man utför allt inom måsvingarna det antal gånger om villkoret anger. Loopinstruktionen har tre delar; först gör man något innan loopen (int i = 0), sen ett villkor som kontrolleras varje gång man loopar och så länge det är sant gör man loopen, sen kod som exekveras varje loop (i++) där man oftast räknar upp eller ner loopvariabeln. Loopvariabeln kan sen användas i koden mellan måsvingarna och i det här fallet används den som index in i arrayen. 

Man börjar med att sätta loopvariabeln i till 0, sen loopar man så länge som i är mindre  än storleken på häftigaVapen och för varje varv så ökar man  loopvariabeln med 1. Det är ett vanligt sätt att loopa igenom alla element i en array men det finns modernare varianter också. 

zino92 63
Postad: 30 nov 2023 06:44

String str säger bara att input-parametern som en användare kan ange till metoden/funktionen är av typen String som CurtJ beskrev är en inbyggd klass i Java och str är ett godtyckligt namn, det hade kunnat vara vad som helst bara för att ge kodaren av metoden/funktionen något att referera input-värdet som kommer in i metoden/funktionen så metod/funktions koden kan använda sig av värdet för logiken den ska köra.

i är också ett godtyckligt namn, kan stå j, k, bla eller vadsom, men det har blivit lite god praxis att använda i för att många är vana vid det. Om det underlättar förståelsen kan du tänka dig bokstaven i står för "iterator" när en loop körs så säger man att varje varv är en iteration, man itererar den kodade logiken mellan måsvingarna som utgör loop-koden.

För övrigt tycker jag det ser ut som där saknas en måsvinge efter return false, finns risk Java klagar på trasig kod om denna glöms bort. Med hjälp av indentering kan sådana fel enklare upptäckas och undvikas/förebyggas :)

Likaså tycker jag personligen du bör undvika använda svenska tecken i variabelnamn för säkerhets skull.

.get(i) är en ArrayList klass-metod som fungerar ungefär som arrayVar[i] för att hämta ett värde på listposition "i" i det här fallet från då vår ArrayLista "häftigaVapen".

getNamn (spännande med svengelska) behöver då vara en metod definierad i klassen som utgör objektet som lagras i ArrayListan så den går att kalla på.

.equals(str) är en inbyggd jämförelsemetod i Java som jämför strängen den kallas på med str strängen angiven inuti parenteserna - om jämförelsen är "sann" anses strängarna vara identiska enligt jämförelse-villkoren specificerade i den inbyggda Java metoden .equals().

.size() är likaså en inbyggd ArrayList metod som hämtar längden på ArrayListan.

Hoppas det underlättar förståelsen :)

Svara
Close