Gå til innhold

Trenger hjelp med oppgave!


Anbefalte innlegg

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
Videoannonse
Annonse

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

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 av GeirGrusom
Lenke til kommentar

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

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
  • 2 uker senere...

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

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 av g_threepwood
Lenke til kommentar

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 av quantum
Lenke til kommentar

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 av Kiff
Lenke til kommentar

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 av quantum
Lenke til kommentar
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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...