Gå til innhold

Trøbbel med metodekall og negativ verdi


Anbefalte innlegg

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 av jemartinsen81
Lenke til kommentar
Videoannonse
Annonse
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 av jemartinsen81
Lenke til kommentar

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

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.

Lenke til kommentar
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. :)

Lenke til kommentar
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?

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

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 av xibriz
Lenke til kommentar
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. :)

Lenke til kommentar

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 av blackbrrd
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...