Persn Skrevet 22. februar 2013 Del Skrevet 22. februar 2013 Du trenger ikke en boolean searcing når du ikke bruker en while-løkke. Google equals-metoden, du kan bruke den til å sjekke navnene i arraylisten opp i mot navnet du tar inn i metoden, f.eks item.getName().equals(itemName) Og til slutt skal du returnere ett objekt av klassen Item, ikke itemName som da blir en String. Lenke til kommentar
g_threepwood Skrevet 22. februar 2013 Forfatter Del Skrevet 22. februar 2013 Equals-metoden kommer ikke før langt bak i boken, så jeg tror nok vi skal løse det på en annen måte. Lenke til kommentar
Persn Skrevet 22. februar 2013 Del Skrevet 22. februar 2013 Høres rart ut, men ok Ta utgangspunkt i dette /** * find item */ public Item findItem(String itemName) { for(Item item: items) { String currentName = item.getName(); if(currentName.contains(itemName)) { return item; } } } Dette er ikke kode jeg har testet, jeg bruker vanligvis equals og ikke contains i en slik sammenheng, men ut i fra eksempelet du har postet tidligere så burde det funke i det minste som pseudokode. Lenke til kommentar
GeirGrusom Skrevet 22. februar 2013 Del Skrevet 22. februar 2013 (endret) Forglemmelse, men du må returnere noe dersom det ikke er noen treff. public Item findItem(String itemName) { for(Item element : items) { String name = element.getName(); if(name != null && name.contains(itemName)) return item; } // Ingen elementer inneholder itemName. Returner null. return null; } I dette tilfellet ignorerer vi at det kan være flere treff, og funksjonen returnerer første treff eller null. Endret 22. februar 2013 av GeirGrusom Lenke til kommentar
g_threepwood Skrevet 25. februar 2013 Forfatter Del Skrevet 25. februar 2013 I klassen Player ekisterer en printmetode som lister informasjon om spilleren. Denne skal nå forbedres slik at den lister en oversikt over alle items til spilleren (navn, beskrivelse, vekt, verdi). I klassen Item har jeg laget en printmetode som gjør akkurat dette. Tipset vi har fått er dette: Ansvar for utlisting av hver enkelt gjenstand overlates til klassen item. Det kan vel ikke være så enkelt som item.print(); ? Lenke til kommentar
LeChock Skrevet 25. februar 2013 Del Skrevet 25. februar 2013 /** * Prints the player items */ public void printItems() { int counter = 1; for(Item i : items.values()){ System.out.println(counter++ + ": " + i); } } Lenke til kommentar
Persn Skrevet 25. februar 2013 Del Skrevet 25. februar 2013 Istedenfor å lage en teller kan du bruke innebygd metode for å hente ut indexverdi på arraylist, tar koden til han over meg og endrer litt. /** * Prints the player items */ public void printItems() { for(Item item : items){ System.out.println(items.indexOf(item) + ": " + item); } } Men dette kallet vil ikke gi deg fornuftig tekst uten at du døper om printmetoden din til public String toString(), noe jeg foreslår at du gjør uansett siden det er sånne objektbeskrivelser toString gjerne brukes til. Om du ikke føler for å skrive om den biten av koden så bytter du til System.out.println(items.indexOf(item) + ": " + item.print()); Så blir det opp til deg å slå inn dette med utskriften du allerede har på Player Lenke til kommentar
g_threepwood Skrevet 8. mars 2013 Forfatter Del Skrevet 8. mars 2013 Hei igjen! Vi skal nå jobbe videre med denne oppgaven, men denne gangen bruker vi HashMap i stedet for ArrayList. Det jeg lurer litt på hvordan man oppretter en statisk metode som sjekker om alle setters har en tom streng? Lenke til kommentar
g_threepwood Skrevet 11. mars 2013 Forfatter Del Skrevet 11. mars 2013 Jeg prøver igjen: Vi skal opprette en klasse Utils hvor vi har en statisk metode som sjekker om alle set-metodene er tomme. Litt hjelp? Lenke til kommentar
GeirGrusom Skrevet 12. mars 2013 Del Skrevet 12. mars 2013 Du kan ikke sjekke om setters har en tom string... du kan sjekke om gettere returnerer null eller en tom string. Lenke til kommentar
Kiff Skrevet 12. mars 2013 Del Skrevet 12. mars 2013 Spørsmålet ditt gir ikke helt mening, det jeg vil anta at du spør etter er en statisk metode som sjekker om en string er "tom", som du evt kan kalle i settere eller andre steder du føler du trenger validering. Vanligvis bruker man f.eks StringUtils fra Apache Commons til slikt, men hvis du skal gjøre det selv (i forbindelese med en skoleoppgave e.l): public static boolean isEmpty(String str) { return str == null || str.length() == 0; } Lenke til kommentar
g_threepwood Skrevet 12. mars 2013 Forfatter Del Skrevet 12. mars 2013 (endret) Dette er en set-metode som jeg skal endre: public void setName(String name) { if (name.trim().isEmpty() || name == null) { this.name = "Unspecified"; } else { this.name = name; } } Hvordan kan jeg gjør et kall på metoden i Utils? Målet med å opprette Utils var å redusere mengden kode, men jeg ser ikke helt hvordan det blir oppnådd? Endret 12. mars 2013 av g_threepwood Lenke til kommentar
quantum Skrevet 12. mars 2013 Del Skrevet 12. mars 2013 (endret) du må først bytte om på rekkefølgen i if-testen, er name null får du en NPE. deretter kan koden din bli seende slik ut, og da vil du sikkert forstå omtrent hva metoden i den statiske klassen skal inneholde public void setName(String name) { Util.setNullSafe(name, this.name); } Endret 12. mars 2013 av quantum Lenke til kommentar
Kiff Skrevet 13. mars 2013 Del Skrevet 13. mars 2013 (endret) Jeg ville gjort slik, men hvis du nettopp har begynt med programmering så ville jeg ikke brukt for mye tid på denne: public void setName(String name) { this.name = Utils.isEmpty(name) ? "Unspecified" : name; } Du kan også gjøre som posten over foreslår, eller skrive om metoden i Utils så den returnerer en String, input eller "Unspecified", istedetfor true/false. Endret 13. mars 2013 av Kiff Lenke til kommentar
quantum Skrevet 13. mars 2013 Del Skrevet 13. mars 2013 (endret) Jeg ville gjort slik, men hvis du nettopp har begynt med programmering så ville jeg ikke brukt for mye tid på denne: public void setName(String name) { this.name = Utils.isEmpty(name) ? "Unspecified" : name; } Når oppgaven er utformet slik så er det åpenbart *meningen* man skal bruke tid på det ... Ikke at kodesnutten over på noen måte er feil eller noe, men mange synes altså det er greit å legge litt arbeid å lage slike hjelpeklasser, eller bruke noen av de mange som er tilgjengelige oss, for å få koden litt mer leselig. Det er jo da meget viktig å gi disse hjelpemetodene gode navn så alle skjønner akkurat hva de gjør. Min kode viser ikke at null oversettes til "Unspecified", så den kunne hatt et enda mer beskrivende navn, men du slipper å stave "Unspecified" riktig flere enn ett sted, enda bedre hadde vært å definere en strengkonstant til formålet, det vil være nyttig med eller uten Util-metoder. Edit: Hvis dette er GUI-kode og det er ønskelig å presentere "Unspecified" ut i GUI istedenfor "null" eller blank syns jeg det er ok å gjøre slik, men om dette er kode i forretningslaget er det bedre å la verdier som ikke er initiert være null, også i databasen. Ellers skapes bare uklarheter og kan være med på å skjule andre feil i koden, som ellers ville blitt avdekket av en NPE. Endret 13. mars 2013 av quantum Lenke til kommentar
GeirGrusom Skrevet 14. mars 2013 Del Skrevet 14. mars 2013 Jeg ville gjort slik, men hvis du nettopp har begynt med programmering så ville jeg ikke brukt for mye tid på denne: public void setName(String name) { this.name = Utils.isEmpty(name) ? "Unspecified" : name; } Det er mildt sagt dårlig skikk å ha en setter som ikke gjør det den skal. Dersom verdien er ugyldig så må du kaste en exception. Det er GUI sin oppgave å presentere data, og da er det, som quantum sier, ekstremt upraktisk om slike ting havner i forretningslogikken. Det blir et helvete å nøste opp i senere. Nesten relevant, men noe av det verre jeg har vært borti var kode som skulle validere et objekt, men i samme slengen gjorde den om kroner til øre. Lenke til kommentar
Kiff Skrevet 14. mars 2013 Del Skrevet 14. mars 2013 Jeg er enig med dere begge, men oppgaven slik den var beskrevet var å legge validering på setteren. Lenke til kommentar
g_threepwood Skrevet 14. mars 2013 Forfatter Del Skrevet 14. mars 2013 public void setName(String name) { this.name = Utils.isEmpty(name) ? "Unspecified" : name; } Denne metoden utelater trim(). Hvor skal den implementeres? Lenke til kommentar
Persn Skrevet 14. mars 2013 Del Skrevet 14. mars 2013 På name, alle sammen, trim() kutter bare vekk tom luft på slutten av stringen så du kan ha den på alle strengene uten at det utgjør noen skade, tenk på det som helgardering. Lenke til kommentar
g_threepwood Skrevet 14. mars 2013 Forfatter Del Skrevet 14. mars 2013 Jeg trenger også litt hjelp med denne her: Dere skal opprette en unit-testklasse som gjør følgende ting: ● Inneholde en setUpmetode som oppretter objekter for alle klassene, putter items inn i samlingen til en spiller, etc. ○ Positiv test på sellItem ○ Negativ test på sellItem ○ Test changeHealth ○ Negativ test på setName Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå