Gå til innhold

Leter etter objekt på plass [i] i tabell ved sammenligning av element


Anbefalte innlegg

Hei! Jeg holder på med en innleveringsoppgave i java. Jeg skal utvide en metode der jeg skal finne ut hvilken plass et objekt har i en tabell, basert på et element av objektet.

 

Metoden har formen:

int finnIndeksFraFarge(String farge){

return -1;
}
 

Farge er ikke et objekt, men et innhold i et annet objekt. Et objekt Blomst inneholder navn og farge. Må jeg bruke en equals-funksjon her? Aner ikke hvordan jeg går igjennom tabell-listen for å se om noen av objektene har den gitte fargen, for så å returnere hvilken plass objektet med den fargen har i tabellen. Metoden skal returnere -1 dersom ingen av blomstene har den fargen.

Endret av Denjam
Lenke til kommentar
Videoannonse
Annonse

Litt mer å gå på hadde vært fint. Men tenker det blir noe i denne duren:

 

int finnIndeksFraFarge(String farge){
    // Antar at blomster er en liste av typen: List<Blomst> blomster;
    for(int i=0; i<blomster.length; i++) {
        // sjekke om blomsten på posisjon i har riktig farge
        if(blomster[i].farge.equals(farge)) {
            return i
        }
    }
    // Om vi kommer hit fant vi ingen
    return -1;
}
Lenke til kommentar

Alt ettersom hvilke krav du ellers har til oppgaven så kan det være en ide å beskytte mot nullpointers også.
 

Eksempel (basert på etse sitt gode forslag):

int finnIndeksFraFarge(String farge){
    int indeks = -1;
    if (farge != null && blomster != null) {
        // Antar at blomster er en liste av typen: List<Blomst> blomster;
        for (int i=0; i<blomster.length; i++) {
            // sjekke om blomsten på posisjon i har riktig farge
            if (blomster[i].farge != null && blomster[i].farge.equals(farge)) {
                indeks = i;
            }
        }
    }
    return indeks;
}

Her er det også byttet til en return statement, som er i tråd med de fleste standardene jeg kjenner til (misra pep google etc).
Hjelper dette deg? Jeg er ellers helt enig med etse, litt mer å gå på hadde vært bra!

Endret av Enthroner
  • Liker 1
Lenke til kommentar

Å besytte mot NPE (nullpointer exceptions) gitkun mening om du faktisk forventer at koden kan være null i det tilfellet. Om det ikke forventet er jo en null nettop en exception - og da er det ofte greit at det feiler - slik at man på et eller annet punkt kan ha en exception-håndtering som f.eks. logger feilen.

 

Så om du fikk en nullpointer exception er det greit å tenke på hvorfor? Hva her er det som kan være null - og så håndtere akkurat det tilfellet. I stede for å bare skrive super-deffansiv kode som prøver å beskytte mot absolutt alt.

  • Liker 1
Lenke til kommentar

Takker for kommentaren! Jeg håndterer en tabell som fylles ut ved input av brukeren. Det gjør at mange av tabell-radene vil være tomme. Å gjøre sammenligninger med null-objekter vil være vanskelig, så jeg tror denne reservasjonen gir mye mer mening i dette tilfellet?

Lenke til kommentar

Bare som et apropos, så er jeg helt enig med etse om at null exception kan være noe man med vilje ikke vil beskytte seg mot.

Sålenge du selv føler du gjør rett så er det bra nok. Sleng inn en kommentar så personen som retter deg forstår hvorfor du har tatt valget ditt. 

Personlig så føler jeg metodenavnet legger opp til en query eller et søk. Søk kan som kjent ofte feile, og jeg synes ikke det er riktig å kjøre en exception for hver gang et søk ikke treffer det man leter etter. Dette forsterkes også av at man spør etter en index, hvor verdien -1 er en verdi de fleste annser som en 'operasjonen du nettop forsøkte mislyktes'-verdi.

 

Til syvende og sist blir det opp til deg hvor mye du nullsjekker. Sålenge du er student så vil du uansett mest sannsynlig ikke trekkes for å ha for mye guards, med mindre oppgaven dreier seg om feilhåndtering i hierarki ;)
Dette svaret er blitt for langt allerede...

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å
×
×
  • Opprett ny...