10 svar
84 visningar
Plugghingsten är nöjd med hjälpen!
Plugghingsten 122
Postad: 10 dec 2018

Onödigt i denna metod eller ej?

Hej! 

Jag satt och kikade på koder för att repetera och fastnade på en metod:

Det som förvirrar mig är current. Ingen aning om vad den gör för nytta här. Är den inte onödig?

AlvinB 3032
Postad: 10 dec 2018 Redigerad: 10 dec 2018

Hur definieras fältet current?

Direkt i konstruktorn verkar den inte har någon funktion men det finns väl kanske någon poäng med att initiera värdet i konstruktorn och sedan använda den i någon annan metod.

adamcl 31
Postad: 11 dec 2018

Syftet med current här verkar vara att den alltid ska sättas till 0 när en ny kortlek skapas.

Laguna 4970
Postad: 11 dec 2018

Vad den är bra för borde framgå av dess deklaration. Om inte annat får man veta om den är privat eller inte. Står det ingen beskrivning där får man söka igenom alla metoder för att se hur den används. Det skulle kunna finnas dokumentation i någon form någonstans också.

Tendo 133
Postad: 11 dec 2018

Framförallt verkar Cards vara onödig.

Man borde kunna skriva

cards[currentCards] = new Card(suit, rank);

och slippa göra 52 kopieringar av ett klass objekt varje gång man skapar en kortlek.

Plugghingsten 122
Postad: 11 dec 2018 Redigerad: 11 dec 2018

Detta är skrivet först i denna klass, sedan kommer metoden som jag postade ovan som följs av

Jag misstänker att currenthar en koppling till antal kort, då slutet av denna klass är skriven på följande sätt

Grejen är det att jag är osäker och vill vara väldigt säker. Därav jag ställer frågan :)

 

Tillbaka till topic/huvudfrågan! Jag ser det som att current ökar i.o.m. "nedan skapas korten och läggs i vektorn" men där står ju att currentCards ökar, inte current. Så vad är den till för? När jag testar att kommentera bort den så blir det ingen skillnad. Det låter rimligt som adamcl säger. Det finns flera klasser (så klart) och en uppgift är att räkna ut sannolikheten för patians för x antal omgångar. 

adamcl 31
Postad: 11 dec 2018

I CardDeck så skapas kortleken. Hur objekten Card ser ut framgår inte av den kod du lagt upp hittills. Samtidigt sätts current till 0. Det är lite oklart varför, det finns ju 52 kort nu men eftersom att vi inte ser hur platserna i Card[] fylls med specifika Card så kan det vara till exempel att de (någon annanstans) skapas enligt mönstret i nya kortlekar (varje färg för sig och i ordning 1-13). I detta läge ska korten inte användas och därför sätts current till 0.

Därefter så blandas korten i shuffle, och då är de redo att användas så då sätts current till 52.

Varje gång ett kort dras i getCard så minskar current med 1. Eftersom att det står current-- innebär det att getCard först returnerar current, därefter körs operationen current = current - 1 (= current--). Alltså dras kort 52 först, därefter 51 osv.

moreCards kollar bara om current är större än 0. Om så returnerar den true.

I avslöja så, om det finns kort kvar (moreCards=true), skriver den ut de kvarvarande korten. getCard() returnerar en cards[x] som automatiskt går genom metoden toString och skrivs ut.

Plugghingsten 122
Postad: 11 dec 2018

Tror jag förstår det mesta, adamcl. Som jag ser det så behövs egentligen inte current sättas som 0 utan det är bara för att "förtydliga det hela, ungefär. Det är som att förklara det som "vi skapar kortlek, inte några/något kort. Alltså kan vi strunta i antal kort", därav det sätts till 0.

Nedan följer beskrivningen på klassen Card om det ger tydligare bild:

Den sista klassen behövs nog inte då det är själva mainmetoden, det viktiga som jag har frågor om (för tillfället) finns ovan.

adamcl 31
Postad: 11 dec 2018

Ja, jag tänkte lite fel ser jag nu. I CardDeck skapas mycket riktigt inte några kort, bara en vektor av objekttypen Card. I det läget är det som du säger 0 kort i kortleken. Då tycker jag det är logiskt att sätta current till 0, om man räknar upp current när ett Card läggs till Card[]. Det ser jag inte att det gör någonstans, utan programmet förutsätter att rätt antal kort skapas. Som det är nu skulle current kunna initieras till null, shuffle sätta current till 52 och moreCards kolla om current != null. Men effekten blir densamma som nu.

Plugghingsten 122
Postad: 12 dec 2018

Okej! Men om jag kommenterar bort current från metoden CardDeck så blir det ingen skillnad. Jag förstår att det är mer korrekt, eller jag visar att jag förstår vad jag skrivit då, men om man tänker logiskt så behövs det ej skrivas. Angående metoden moreCardsså gör jag väl samma jämförelse som du beskrev ovan, fast vänt på frågan?

Aerius 191
Postad: 12 dec 2018

Om du kommenterar bort current från konstruktorn CardDeck händer inget eftersom current initieras till noll när current definieras i klassen CardDeck. Att tilldela current värdet noll i konstruktorn gör det extra tydligt att kortleken inte ska användas innan den vaskats. Prova att kommentera bort definitionen av current i klassen för att se vad som händer.

Svara Avbryt
Close