Gå til innhold

Problemer med bankkonto oppgave


Anbefalte innlegg

Hei, jobber med noen oppgaver i en Javabok jeg leser. Jeg lager en bankkonto hvor man kan ta ut penger og sette inn. Foreløpig lager jeg en innloggingssjekk som krever at brukeren kan bankpassordet sitt. Av en eller annen grunn går det ikke ann å logge seg inn i det hele tatt... Noen som ser noen feil?

 

import static javax.swing.JOptionPane.*;

public class Main {
   
   int saldo;
   String kontonr;
   
   public Main(int saldo, String kontonr) {
       this.saldo = saldo;
       this.kontonr = kontonr;
   }
   
   public double finnSaldo () {
       return saldo;
   }
   public String finnKontonr () {
       return kontonr;
   }
   public int trykkKode (String kontoKode) {
       if (kontoKode == "hemmelig") {
           return 1;
       } else {
           return 0;
       }
   }
   public void uttak (int uttak) {
       saldo = saldo - uttak;
   }
   public void innskudd (int innskudd) {
       saldo = saldo + innskudd;
   }

   public static void main(String[] args) {
       Main olesKonto = new Main (10000, "070488 45678");
       String kode = showInputDialog("Skriv inn bankkoden din:");
       kode.trim();
       switch (olesKonto.trykkKode(kode)) {
           case 1 :
               showMessageDialog(null, "Du er logget inn!");
               break;
           case 0 :
               showMessageDialog(null, "Du er ikke logget inn!");
               break;
       }
   }
   
}

Lenke til kommentar
Videoannonse
Annonse

Jeg ser to feil:

 

kode.trim();

Dette vil ikke fungere da en String er immutable, dvs at den ikke kan endres. Trim-metoden returnerer resultatet, dvs at den skal brukes slik:

 

kode = kode.trim();

Den andre feilen er at du bruker == for å sammenligne karakterene i en streng. Dette sammenligner bare minnereferansen, noe som blir feil i dette tilfellet. Bruk heller metoden equals slik:

 

if (kontoKode.equals("hemmelig")) ...

 

Håper dette hjalp deg!

(Jeg har ikke testet endringene fordi jeg ikke har Java-kompilator installert)

 

Øyvind

Lenke til kommentar
	public static void main(String[] args) {
 Main olesKonto = new Main(10000, "070488 45678");
 boolean isLoggedInn = false;
 while (!isLoggedInn) {
 	String kode = JOptionPane
   	.showInputDialog("Skriv inn bankkoden din:");
 	kode = kode.trim();
 	switch (olesKonto.trykkKode(kode)) {
 	case 1:
   JOptionPane.showMessageDialog(null, "Du er logget inn!");
   isLoggedInn = true;
   break;
 	case 0:
   JOptionPane.showMessageDialog(null, "Du er ikke logget inn!");
   break;
 	}
 }
}

Lenke til kommentar

Tusen takk, da har jeg lært noe nyttig i dag også :hmm::D Her er ihvertfall det ferdige produktet for dem som er interesserte (kom gjerne med kommentarer hvis det er noe å kommentere):

 

import static javax.swing.JOptionPane.*;

public class Main {
   
   int saldo;
   String kontonr;
   
   public Main(int saldo, String kontonr) {
       this.saldo = saldo;
       this.kontonr = kontonr;
   }
   public double finnSaldo () {
       return saldo;
   }
   public int tilgang (String kontoKode) {
       if (kontoKode.equals("1234")) {
           return 1;
       } else {
           return 0;
       }
   }
   public void uttak (int uttak) {
       saldo = saldo - uttak;
   }

   public static void main(String[] args) {
       Main olesKonto = new Main (10000, "070488 45678");
       boolean repiter = true;
       
       while (repiter) {
           String kode = showInputDialog("Skriv inn bankkoden din:");
           kode = kode.trim();
               switch (olesKonto.tilgang(kode)) {
                   case 1 :
                       repiter = false;
                       break;
                   case 0 :
                       showMessageDialog(null, "Feil passord, Skriv inn på nytt!");
                       break;
               } // Slutt switch
       } // Slutt while, fortsett programmet ->
      
       showMessageDialog (null, "Du har " + olesKonto.finnSaldo() + "kr til din disposisjon!");
       boolean gyldigUttak = false;
       
       while (!gyldigUttak) {
           try {
               String uttakInput = showInputDialog ("Hvor mye vil du ta ut av banken?");
               int uttak = Integer.parseInt(uttakInput);
               
               if (olesKonto.finnSaldo() - uttak < 0) {
                   gyldigUttak = false;
                   showMessageDialog (null, "Du har ikke mer enn " + olesKonto.finnSaldo() + "" +
                           "kr til din disposisjon!");
               } else {
                   gyldigUttak = true;
                   olesKonto.uttak(uttak);
                   showMessageDialog (null, "Du tok ut " + uttak + 
                           "kr fra banken og har " + olesKonto.finnSaldo() + "kr til din disposisjon!");
               } // Slutt if
           } catch (NumberFormatException e) {
               showMessageDialog (null, "Ygyldige tall, prøv på nytt!");
           } // Slutt try/catch
       } // Slutt while
   } // Slutt main
} // Slutt class Main

Endret av kjey
Lenke til kommentar

bare en liten bagatell: saldoen oppgis som int. Det samme gjelder innskudd/uttak. Men når man skal hente fram saldoen returneres double... Du må nok bestemme deg om du vil gå for double eller int her. Ikke begge deler!!

 

double er vel greit for å få det realistisk, men prøv å ikke skrive ut mer en 2 desimaler ved saldoutskrift ;)

Lenke til kommentar

når vi først er inne på variabeltyper så syns jeg det er litt merkelig at metoden "tilgang" returnerer int på 1 eller 0 for så å bruke switch på den, hvorfor ikke bare boolean?

 

  public boolean tilgang (String kontoKode) {
      return (kotokode.equals("1234") ? true : false);
  }

og

if (olesKonto.tilgang(kode)) {
   repeter = false;
} else {
    showMessageDialog(null, "Feil passord, Skriv inn på nytt!");
}

Endret av elminzter
Lenke til kommentar
når vi først er inne på variabeltyper så syns jeg det er litt merkelig at metoden "tilgang" returnerer int på 1 eller 0 for så å bruke switch på den, hvorfor ikke bare boolean?

 

  public boolean tilgang (String kontoKode) {
      return (kotokode.equals("1234") ? true : false);
  }

 

6159841[/snapback]

 

eller bare

  public boolean tilgang (String kontoKode) {
      return kontoKode.equals("1234");
  }

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