kjey Skrevet 22. mai 2006 Skrevet 22. mai 2006 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; } } }
oyvind_b Skrevet 22. mai 2006 Skrevet 22. mai 2006 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
kjey Skrevet 22. mai 2006 Forfatter Skrevet 22. mai 2006 Takk, fungerte flott! Men et annet spørsmål: Hvis bankkoden er feil, hvordan kan da programmet starte på nytt av seg selv etter de har sett message boxen?
HV Skrevet 22. mai 2006 Skrevet 22. mai 2006 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; } } }
kjey Skrevet 22. mai 2006 Forfatter Skrevet 22. mai 2006 (endret) Tusen takk, da har jeg lært noe nyttig i dag også 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 22. mai 2006 av kjey
qualbeen Skrevet 22. mai 2006 Skrevet 22. mai 2006 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
elminzter Skrevet 23. mai 2006 Skrevet 23. mai 2006 (endret) 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 23. mai 2006 av elminzter
CruellaDeVille Skrevet 23. mai 2006 Skrevet 23. mai 2006 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"); }
elminzter Skrevet 23. mai 2006 Skrevet 23. mai 2006 hahaha, så klart ^^ skrev egentlig opp en if-setning, men så korta jeg den ned uten å i det hele tatt tenke meg om ^^
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å