jemartinsen81 Skrevet 22. september 2007 Skrevet 22. september 2007 (endret) Kan noen gi med råd om hvordan jeg kan få et metodekall til å ikke godta negativ verdi i variabelen sin? Eksempel, variabelen "beløp" skal ikke kunne være negativ: public void innskudd(double beløp) { saldo = saldo + beløp; } Jeg går ut ifra at jeg begynner med "if (beløp < 0)", eller noe tilsvarende med while funksjon, men klarer ikke finne ut hva jeg skal skrive for å få metodekallet til å restarte seg selv for å be om ny verdi (dersom det er det den skal gjøre når den mottar noe negativt). Endret 22. september 2007 av jemartinsen81
toddy23 Skrevet 22. september 2007 Skrevet 22. september 2007 public void innskudd(double beløp) { if(beløp < 0){ System.out.println("Beløper er negativt, prøv igjen") return; } saldo += beløp; } Skulle fungere
jemartinsen81 Skrevet 22. september 2007 Forfatter Skrevet 22. september 2007 (endret) public void innskudd(double beløp) { if(beløp < 0){ System.out.println("Beløper er negativt, prøv igjen") return; } saldo += beløp; } Skulle fungere 9549974[/snapback] Takk, men er det ingen måte å få den til å rett og slett ikke godta noen negativ verdi, og øyeblikkelig spørre om et nytt tall uten at jeg manuellt må kjøre hele metodekallet om igjen først? Endret 22. september 2007 av jemartinsen81
xibriz Skrevet 22. september 2007 Skrevet 22. september 2007 (endret) Du kan jo endre metoden til og returnere en boolean: public bollean innskudd(double beløp) { if(beløp < 0){ return false; } else { saldo += beløp; return true; } } og der du kjører koden kan du jo boolean tmp = false; while (tmp == false) { tmp = innskudd( beløp ); } Endret 22. september 2007 av xibriz
jemartinsen81 Skrevet 23. september 2007 Forfatter Skrevet 23. september 2007 Takk for løsningsforslag, men jeg kan ikke få det til å fungere i denne oppgaven. Dette er koden jeg har: http://pastebin.com/m12ea5163 Jeg vil at programmet skal spørre om verdien igjen dersom man prøver å taste inn et negativt først, men slik koden er nå så fungerer det ikke i det hele tatt. Hva kan være feil?
McFly Skrevet 23. september 2007 Skrevet 23. september 2007 Det er bedre om du legger med hele programmet, slik at andre lett kan teste det ut selv Når du ikke har postet koden som spør brukeren legge inn en verdi, så blir det vanskelig å se helheten. På meg så ser det dog ut som om progarmmet ditt kommer til å sette seg fast i en evighetsløkke om verdien er under null. Årsaken er at du kaller opp identisk metode rekursivt når verdien er negativ.
jemartinsen81 Skrevet 23. september 2007 Forfatter Skrevet 23. september 2007 Det er bedre om du legger med hele programmet, slik at andre lett kan teste det ut selv Når du ikke har postet koden som spør brukeren legge inn en verdi, så blir det vanskelig å se helheten. På meg så ser det dog ut som om progarmmet ditt kommer til å sette seg fast i en evighetsløkke om verdien er under null. Årsaken er at du kaller opp identisk metode rekursivt når verdien er negativ. 9556689[/snapback] Ja det er evighetsløkke slik det er nå, så har du noen forslag til hva jeg kan bruke på linje 53 her for at den øyeblikkelig skal spørre om verdi igjen dersom man taster inn noe den ikke godtar først? http://pastebin.com/m774d564e Takk.
Hittman Skrevet 23. september 2007 Skrevet 23. september 2007 Da må du isåfall ha en ny input request i while-løkken for at verdien skal endre seg. I utgangspunktet ville jeg lagt denne sjekken der du først kaller metoden, og ikke i selve metoden. Dette for at metoden skal ha minst mulig å gjøre.
jemartinsen81 Skrevet 23. september 2007 Forfatter Skrevet 23. september 2007 Da må du isåfall ha en ny input request i while-løkken for at verdien skal endre seg. I utgangspunktet ville jeg lagt denne sjekken der du først kaller metoden, og ikke i selve metoden. Dette for at metoden skal ha minst mulig å gjøre. 9556767[/snapback] Hvordan skal input-requesten se ut når jeg ikke kan bruke scanner.nextDouble() i denne klassen?
xibriz Skrevet 23. september 2007 Skrevet 23. september 2007 kan jeg få se main så kanskje jeg kan fikse det?
jemartinsen81 Skrevet 23. september 2007 Forfatter Skrevet 23. september 2007 (endret) kan jeg få se main så kanskje jeg kan fikse det? 9558794[/snapback] Jeg har ikke laget noen klasse med main-metode enda. Oppgaven her er at jeg skal gjøre det slik at objektet jeg oppretter ved bruk av denne klassen ikke skal godta negative verdier i variabelen "beløp" på innskudd-metodekallet. Jeg setter stor pris på hvilke som helst løsningsforslag dere kan komme med. De fleste hjemmeoppgavene suser jeg gjennom, men her har jeg skikkelig hjerneteppe av en eller annen grunn. Endret 23. september 2007 av jemartinsen81
xibriz Skrevet 23. september 2007 Skrevet 23. september 2007 (endret) Hvis du bare skal forkaste alle negative tall er det vel bare å skrive public boolean innskudd(double beløp) { if (beløp < 0) { return false; //Kan ikke godta negativ verdi } else { saldo = saldo + beløp; return true; } } public boolean uttak(double beløp) { if (beløp < 0) { return false; //Kan ikke godta negativ verdi } else { saldo = saldo - beløp; return true; } } Også må det være opp til koden i main og håndtere returverdiene fra innskudd og uttak. Endret 23. september 2007 av xibriz
jemartinsen81 Skrevet 24. september 2007 Forfatter Skrevet 24. september 2007 Hvis du bare skal forkaste alle negative tall er det vel bare å skrive public boolean innskudd(double beløp) { if (beløp < 0) { return false; //Kan ikke godta negativ verdi } else { saldo = saldo + beløp; return true; } } public boolean uttak(double beløp) { if (beløp < 0) { return false; //Kan ikke godta negativ verdi } else { saldo = saldo - beløp; return true; } } Også må det være opp til koden i main og håndtere returverdiene fra innskudd og uttak. 9558946[/snapback] Takk skal du ha, det er jo sli kdet blir ja... glemte for en stund at resten kan løses i main metoden.
xibriz Skrevet 24. september 2007 Skrevet 24. september 2007 Du må jo også ha sjekk i uttakmetoden på at du ikke kan ta ut større beløp enn saldoen din... hvis ikke kommer jeg til deg å tar ut penger
blackbrrd Skrevet 26. september 2007 Skrevet 26. september 2007 (endret) Det går jo også an å throwe en IllegalArgumentException hvis argumentet er 0 eller mindre. Da vil programmet ditt feile hvis du har glemt å skrive sjekken av bruker-input istedetfor å f.eks ignorere feilen uten å si ifra, eller justere kontoen feil. Sjekkingen av at beløpet er 0 eller større bør gjøres der verdien skrives inn. Det er ihvertfall hva som er logisk å gjøre hvis du har skillt brukergrensesnittet fra business-logikken. http://pastebin.com/m22ea0b6b Det er forresten ikke noen god ide å bruke tegn som æøå i koden din, det kommer på ett eller annet tidspunkt til å lage masse krøll. Endret 26. september 2007 av blackbrrd
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å