Alle möglichen Error Möglichkeiten abfangen

Kirby.exe

Top Contributor
Also ich hatte mir einfach mal zur Übung selbst eine Aufgabe gestellt :) Ich wollte einen Bankautomaten coden :)

Meine Frage wäre, findet jemand vielleicht noch eine Sicherheitslücke in meinem Code :)

Bank Klasse:
Java:
import java.util.ArrayList;
import java.util.ListIterator;
import java.util.Scanner;

public class Bank {
    @SuppressWarnings("resource")
    int BankID;
    String Bankname;
    ArrayList <Konto> Database = new ArrayList <Konto>();
    
    Bank(String name){
        this.BankID = 123456789;
        this.Bankname = name;
    }
    
    void createAccount() {
        Scanner sc = new Scanner(System.in);
        Konto acc = new Konto();
        System.out.println("Geben sie den Kontoinhaber ein: ");
        acc.Kontoinhaber = sc.nextLine();
        System.out.println("Geben sie ihre gewünschte Kontonummer ein: ");
        acc.Kontonummer = Integer.parseInt(sc.nextLine());
        acc.Kontostand = 0;
        Database.add(acc);
        System.out.println("Ihr Konto wurde erfolgreich erstellt.");
    }
    
    void closeAccount(int id) {
        ListIterator<Konto> run = Database.listIterator();
        Konto temp;
        while(run.hasNext()) {
            temp = run.next();
            if(temp.Kontonummer == id) {
                run.remove();
                break;
            }
        }
        System.out.println("Ihr Konto wurde erfolgreich aufgelöst.");
    }
    
    int checkBalance(int id) {
        ListIterator<Konto> run = Database.listIterator();
        Konto temp;
        while(run.hasNext()) {
            temp = run.next();
            if(temp.Kontonummer == id) {
                return temp.Kontostand;
            }
        }
        return -1;
    }
    
    void withdraw(int id) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Geben sie den Betrag ein, welchen sie abheben wollen: ");
        int money = Integer.parseInt(sc.nextLine());
        ListIterator<Konto> run = Database.listIterator();
        Konto temp = new Konto();
        while(run.hasNext()) {
            temp = run.next();
            if(temp.Kontonummer == id) {
                temp.Kontostand = temp.Kontostand - money;
            }else {
                return;
            }
        }
        System.out.println("Der Betrag wurde erfolgreich ausgezahlt. Ihr verbleibendes Guthaben beträgt " + temp.Kontostand + " $.");
        
    }
    
    void deposit(int id) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Geben sie den Betrag ein, welchen sie einzahlen wollen: ");
        int money = Integer.parseInt(sc.nextLine());
        ListIterator<Konto> run = Database.listIterator();
        Konto temp = new Konto();
        while(run.hasNext()) {
            temp = run.next();
            if(temp.Kontonummer == id) {
                temp.Kontostand = temp.Kontostand + money;
            }
        }
        System.out.println("Der Betrag wurde erfolgreich eingezahlt. Ihr verbleibendes Guthaben beträgt " + temp.Kontostand + " $.");
    }
}

Konto Klasse:

Java:
public class Konto {

    public int Kontostand;
    public int Kontonummer;
    public String Kontoinhaber;
    
    
}

Test Klasse:

Java:
import java.util.Scanner;

public class Testing {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Bank banking = new Bank("Postbank");
        String check = "";
        
        while(!(check.equals("Nein"))) {
            System.out.println("Welche Aktion wollen sie ausführen?  Geld einzahlen(1), Geld abheben(2), Kontostand abrufen(3), "
                    + "Neues Konto eröffnen(4), Konto schließen(5)");
            int mode = Integer.parseInt(sc.nextLine());
            if(sc.hasNextInt()) {
            
                switch(mode) {
                
                case 1:
                    System.out.println("Geben sie ihre Kontonummer ein: ");
                    int num1 = Integer.parseInt(sc.nextLine());
                    if(sc.hasNextInt()) {
                        banking.deposit(num1);
                    }else {
                        System.out.println("Error! Das ist keine Zahl");
                    }
                    
                    break;
                case 2:
                    System.out.println("Geben sie ihre Kontonummer ein: ");
                    int num2 = Integer.parseInt(sc.nextLine());
                    if(sc.hasNextInt()) {
                        banking.withdraw(num2);
                    }else {
                        System.out.println("Error! Das ist keine Zahl");
                    }
                    break;
                case 3:
                    System.out.println("Geben sie ihre Kontonummer ein: ");
                    int num3 = Integer.parseInt(sc.nextLine());
                    if(sc.hasNextInt()) {
                        System.out.println(banking.checkBalance(num3));
                    }else {
                        System.out.println("Error! Das ist keine Zahl");
                    }
                    break;
                case 4:
                    banking.createAccount();
                    break;
                case 5:
                    System.out.println("Geben sie ihre Kontonummer ein: ");
                    int num4 = Integer.parseInt(sc.nextLine());
                    if(sc.hasNextInt()) {
                        banking.closeAccount(num4);
                    }else {
                        System.out.println("Error! Das ist keine Zahl");
                    }
                    break;
                }
                
                System.out.println("Wollen sie eine weiter Aktion durchführen? Geben sie Ja oder Nein ein.");
                check = sc.nextLine();
            }else {
                System.out.println("Error! Das ist keine Zahl");
            }
        }

    }

}
 

Kirby.exe

Top Contributor
Naja also alles Mögliche was schief laufen könnte, einfach Dinge die mein Code nicht abfängt :) Und wenn ihr Tipps zu meinem Code habt, wie man Dinge effizienter macht, ebenfalls gerne her damit :)
 
K

kneitzel

Gast
Was mir auffällt:

a) Die Naming Standards sind nicht eingehalten. Variablen sollten immer klein Anfangen.

b) Erstellung eines neuen Kontos ist unnötig z.B. in withdraw:
Java:
        Konto temp = new Konto();
        while(run.hasNext()) {
            temp = run.next();

Du willst doch nur die existierenden Konten durchgehen, also macht es keinen Sinn, da ein neues Konto zu erstellen.

c) Egal ob ein Konto gefunden wurde oder nicht: Es kommt eine positive Rückmeldung? Da macht es Spaß, Geld abzuheben.
Damit verbunden: Die Logik ist komplett falsch:
Java:
        while(run.hasNext()) {
            temp = run.next();
            if(temp.Kontonummer == id) {
                temp.Kontostand = temp.Kontostand - money;
            }else {
                return;
            }
Also solange es noch Konten gibt:
- temp soll das nächste Konto sein: Also jetzt das erste Konto.
- Dann prüft er: Ist das Konto das richtige? Mal angenommen, das wäre der Fall: Der Kontostand wird angepasst.
--> Ende der Schleife, mal angenommen, es gibt noch mehr Konten:
- temp ist nun das nächste Konto
- Kontonummer ist nun unterschiedlich: Er springt also zurück -> Keine Ausgabe!

Angenommen, das erste Konto ist schon nicht das gesuchte Konto: Dann springt er sofort zurück.

Der Code macht also nur das, was Du erwartest, wenn es nur genau ein Konto gibt und das auch noch das gesuchte Konto ist.

d) Den Fall, dass ein Konto nicht existiert, sehe ich nicht. Das sollte doch auch angezeigt werden, oder?

e) Viel doppelter Code. Wenn Du code Mehrfach hast, dann steck ihn doch in eine Methode und ruf diese auf.

f) Ganz viele Scanner ... das ist neben main die zweite Ausnahme, wo ich ein static durchaus ok finde. Also z.B. ein public static Scanner SCANNER = new Scanner(System.in); in einer Klasse und dann wird diese Instanz immer genutzt ....

g) Nett wäre noch: Du fängst ja schon an, in Klassen zu arbeiten. Wie wäre es denn, wenn Du die Kontenverwaltung in einer Klasse Kapseln würdest? Dann hättest Du da nur noch die gewünschte Methoden drauf - das ist aber nur eine Idee.
 

Kirby.exe

Top Contributor
Was mir auffällt:
a) Die Naming Standards sind nicht eingehalten. Variablen sollten immer klein Anfangen.
Ich werde das mal korrigieren :)

b) Erstellung eines neuen Kontos ist unnötig z.B. in withdraw:
Java:
        Konto temp = new Konto();
        while(run.hasNext()) {
            temp = run.next();

Du willst doch nur die existierenden Konten durchgehen, also macht es keinen Sinn, da ein neues Konto zu erstellen.
Naja also ich würde halt im Print eine Fehlermeldung bekommen, dass temp nicht initialisiert wurde :( Ich versuche mal den Fall mit keinem passenden Konto einzufügen

Edit: ich habe doch den Case abgedeckt, falls es keinen Match gibt :) Nur keine Print Meldung dazu verfasst :)

Java:
while(run.hasNext()) {
            temp = run.next();
            if(temp.Kontonummer == id) {
                temp.Kontostand = temp.Kontostand - money;
            }else {
                return; // <----- Wenn kein Match
            }
        }
 

Kirby.exe

Top Contributor
Warum bricht das Programm hiernach ab und es wird nichts mehr ausgeführt, wenn ich doch Zahlen von 1-5 eingebe ?

Java:
int mode = Integer.parseInt(sc.nextLine());
            System.out.println(mode);
            if(sc.hasNextInt()) {
                switch(mode) {
 

Kirby.exe

Top Contributor
Es scheint am der while schleifen Bedingung zu liegen jedoch verstehe ich nicht ganz genau was er von mir möchte

Edit: Hat nichts damit zu tun, irgendwie muss ich die Zahlen doppelt eingeben bis der switch reagiert...Ich habe ehrlich gesagt keinen Schimmer woran es liegt xD

Hier ist meine aktuelle Testing Klasse:
Java:
import java.util.Scanner;

public class Testing {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Bank banking = new Bank("Postbank");
        String check = "";
        
        while(!(check.equals("Nein"))) {
            System.out.println("Welche Aktion wollen sie ausführen?  Geld einzahlen(1), Geld abheben(2), Kontostand abrufen(3), "
                    + "Neues Konto eröffnen(4), Konto schließen(5)");
            int mode = Integer.parseInt(sc.nextLine());
            System.out.println(mode);
            System.out.println(sc.hasNextInt());
            if(sc.hasNextInt()) {
                switch(mode) {
                case 1:
                    System.out.println("Geben sie ihre Kontonummer ein: ");
                    int num1 = Integer.parseInt(sc.nextLine());
                    if(sc.hasNextInt()) {
                        banking.deposit(num1);
                    }else {
                        System.out.println("Error! Das ist keine Zahl");
                    }
                    
                    break;
                case 2:
                    System.out.println("Geben sie ihre Kontonummer ein: ");
                    int num2 = Integer.parseInt(sc.nextLine());
                    if(sc.hasNextInt()) {
                        banking.withdraw(num2);
                    }else {
                        System.out.println("Error! Das ist keine Zahl");
                    }
                    break;
                case 3:
                    System.out.println("Geben sie ihre Kontonummer ein: ");
                    int num3 = Integer.parseInt(sc.nextLine());
                    if(sc.hasNextInt()) {
                        System.out.println(banking.checkBalance(num3));
                    }else {
                        System.out.println("Error! Das ist keine Zahl");
                    }
                    break;
                case 4:
                    banking.createAccount();
                    break;
                case 5:
                    System.out.println("Geben sie ihre Kontonummer ein: ");
                    int num4 = Integer.parseInt(sc.nextLine());
                    if(sc.hasNextInt()) {
                        banking.closeAccount(num4);
                    }else {
                        System.out.println("Error! Das ist keine Zahl");
                    }
                    break;
                default:
                    System.out.println("Error");
                    break;
                }
            }else {
                System.out.println("Error! Das ist keine Zahl");
            }
                System.out.println("Wollen sie eine weiter Aktion durchführen? Geben sie Ja oder Nein ein.");
                check = sc.nextLine();
        }

    }

}
 
Zuletzt bearbeitet:
K

kneitzel

Gast
Edit: ich habe doch den Case abgedeckt, falls es keinen Match gibt :) Nur keine Print Meldung dazu verfasst :)

Java:
while(run.hasNext()) {
            temp = run.next();
            if(temp.Kontonummer == id) {
                temp.Kontostand = temp.Kontostand - money;
            }else {
                return; // <----- Wenn kein Match
            }
        }

Nein. In der Beschreibung habe ich diesen Fall auch beschrieben: "Angenommen, das erste Konto ist schon nicht das gesuchte Konto: Dann springt er sofort zurück."

Also stell den Fall nach:
Zwei Konten: 1 und 2.
Dann fügst Du beiden Konten Geld hinzu.

==> Bei einem Fall wird es nicht klappen, da das erste Konto nicht das gesuchte ist und er daher sofort abbricht.
==> Bei dem anderen Fall wird es klappen, aber die Ausgabe stimmt nicht, da er das erste Konto anpasst, dann kommt er zum zweiten Konto und da geht er dann in das return so dass keine Ausgabe kommt.

Es gibt ein paar 08/15 Pattern, die immer wieder benutzt werden:
1) Etwas für alle Elemente machen:
Code:
Für jedes Element einer Menge
--> Element bearbeiten
Das <Element bearbeiten> kann dann auch in Form einer if / else Anweisung vorhanden sein. Wichtiges Merkmal hierbei ist: Es wird (in der Regel) nicht abgesprungen, also kein return oder break!

2) Ein Element aus einer Menge bearbeiten oder suchen:
Code:
Für jedes Element einer Menge
--> Ist das Element das gesuchte? Dann Element bearbeiten und return.

Aktion, wenn Element nicht gefunden.

Hier ist wichtig: Die Aktion für Element nicht gefunden ist außerhalb der Schleife!

Tipp: Wenn Du am Anfang Probleme hast, sowas zu überblicken: Mach die Methoden kleiner!

Dann könnte z.B. die Methode so aussehen:
Java:
    void withdraw(int id) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Geben sie den Betrag ein, welchen sie abheben wollen: ");
        int money = Integer.parseInt(sc.nextLine());
        
        Konto gesuchtesKonto = findeKonto(Database, id);
        if (gesuchtesKonto == null) {
            // behandlung von "Konto nicht gefunden" Fall
            return; // Abbruch der Methode.
        }
        
        gesuchtesKonto.Kontostand = gesuchtesKonto.Kontostand - money;
        System.out.println("Der Betrag wurde erfolgreich ausgezahlt. Ihr verbleibendes Guthaben beträgt " + gesuchtesKonto.Kontostand + " $.");   
    }

Und das findeKonto ist dann einfach sowas:
Java:
public static Konto findeKonto(List<Konto> kontoListe, int kontoNummer) {
    for(Konto konto: kontoListe) {
        if (konto.Kontonummer == kontoNummer) return konto;
    }
    return null;
}

Falls du das verwendete for each nicht kennst, kannst Du es auch gerne per Iterator oder normaler for schleife lösen - so eine Schleife hast Du ja schon mitbekommen.

Aber erst einmal ist wichtig, dass Du den Fehler des aktuellen Codes verstehst, damit Du auch die Lösung verstehen kannst. Das Verständnis, das ein if/else in der while Schleife falsch ist, wenn Du für ein Element etwas machen willst, ist in meinen Augen wichtig!
 

Kirby.exe

Top Contributor
Soweit so gut, jedoch verstehe ich trotzdem dass Problem nicht was in der Testklasse falsch läuft :( Aus irgendeinem Grund muss ich eingaben doppelt tätigen bis etwas passiert
 
K

kneitzel

Gast
Und nun zu dem anderen Code. Kannst Du einmal beschreiben, was Du hier machen willst?
Java:
            int mode = Integer.parseInt(sc.nextLine());
            System.out.println(mode);
            System.out.println(sc.hasNextInt());
            if(sc.hasNextInt()) {

Also in der ersten Zeile liest Du eine ganze Zeile und parst diese in einen Integer. Da gibt es zwei Fälle:
a) In der Zeile stand eine Zahl, die in einen Int geparst werden konnte -> Dann hast Du in mode eine gültige Zahl.
b) Es ist keine gültige Zahl eingegeben worden, dann wirft Integer.parseInt eine Exception und da du diese nicht abfängst, wird das Programm beendet.

Dann - nachdem Du in mode schon eine gültige Zahl hast - fragst Du ab, ob ein int am Scanner anliegt? Du hast doch bereits eine gültige Zahl in mode!
 

Kirby.exe

Top Contributor
Und nun zu dem anderen Code. Kannst Du einmal beschreiben, was Du hier machen willst?
Java:
            int mode = Integer.parseInt(sc.nextLine());
            System.out.println(mode);
            System.out.println(sc.hasNextInt());
            if(sc.hasNextInt()) {

Also in der ersten Zeile liest Du eine ganze Zeile und parst diese in einen Integer. Da gibt es zwei Fälle:
a) In der Zeile stand eine Zahl, die in einen Int geparst werden konnte -> Dann hast Du in mode eine gültige Zahl.
b) Es ist keine gültige Zahl eingegeben worden, dann wirft Integer.parseInt eine Exception und da du diese nicht abfängst, wird das Programm beendet.

Dann - nachdem Du in mode schon eine gültige Zahl hast - fragst Du ab, ob ein int am Scanner anliegt? Du hast doch bereits eine gültige Zahl in mode!
Ich möchte halt einen Int einlesen und wenn ich einen korrekten Int eingebe, muss ich trotzdem den Int nocheinmal eingeben bevor überhaupt etwas passiert.

Wie könnte man diesen Fall besser abfangen ? mit try catch?
 
Zuletzt bearbeitet:
K

kneitzel

Gast
Ich habe Dir ja schon mehrfach geraten, so Dinge in eine Methode auszulagern.

Daher wäre sowas möglich:
Java:
public final static Scanner SCANNER = new Scanner(System.in);

public static Integer getUserChoice() {
    try {
        return Integer.parseInt(SCANNER.getLine());
    } catch (NumberFormatException ex) {
        // Logging wäre noch interessant ...
        return null;
    }
}

Ist ungetestet und ich habe da auch nicht zu sehr drüber nachgedacht. Aber das wäre jetzt:
a) Scanner ist in einer public static Variable, damit alle diese Scanner-Instanz nutzen können => Nur ein Scanner auf System.in!
b) Eine Methode, die ein Integer zurück gibt. Integer hat den Vorteil gegenüber int, dass null zurück gegeben werden kann.
c) Es wird nun eine Zeile gelesen und die Eingabe direkt in ein int umgewandelt und diese zurück gegeben.
Wenn die Zahl nicht in eine Zahl übersetzt werden konnte, dann wird null zurück gegeben.

Damit kannst Du dann etwas bauen wie:
Java:
switch(getUserChoice()) {
  case 0: // ....
      break;

  case 1: // ....
      break;

  default:
      System.out.println("Eingabe ungültig. Bitte erneut probieren!");
}

Also wirklich immer möglichst kleine, übersichtliche Methoden schreiben, diese ausprobieren und so austesten. So lernt man aus meiner Sicht am besten.
 

Kirby.exe

Top Contributor
Ich habe Dir ja schon mehrfach geraten, so Dinge in eine Methode auszulagern.

Daher wäre sowas möglich:
Java:
public final static Scanner SCANNER = new Scanner(System.in);

public static Integer getUserChoice() {
    try {
        return Integer.parseInt(SCANNER.getLine());
    } catch (NumberFormatException ex) {
        // Logging wäre noch interessant ...
        return null;
    }
}

Ist ungetestet und ich habe da auch nicht zu sehr drüber nachgedacht. Aber das wäre jetzt:
a) Scanner ist in einer public static Variable, damit alle diese Scanner-Instanz nutzen können => Nur ein Scanner auf System.in!
b) Eine Methode, die ein Integer zurück gibt. Integer hat den Vorteil gegenüber int, dass null zurück gegeben werden kann.
c) Es wird nun eine Zeile gelesen und die Eingabe direkt in ein int umgewandelt und diese zurück gegeben.
Wenn die Zahl nicht in eine Zahl übersetzt werden konnte, dann wird null zurück gegeben.

Damit kannst Du dann etwas bauen wie:
Java:
switch(getUserChoice()) {
  case 0: // ....
      break;

  case 1: // ....
      break;

  default:
      System.out.println("Eingabe ungültig. Bitte erneut probieren!");
}

Also wirklich immer möglichst kleine, übersichtliche Methoden schreiben, diese ausprobieren und so austesten. So lernt man aus meiner Sicht am besten.
Ok Dankeschön :) Ich werde meine Methoden mal etwas aufsplittern :)
 

Kirby.exe

Top Contributor
Ich habe jetzt einfach mal nur das einlesen, so wie du es geschrieben hast in eine Methode gesteckt, jedoch ist das Problem immernoch da...Wenn ich etwas eingebe passiert nichts, beim zweiten eingeben wird eine Methode aufgerufen :( Woran könnte das liegen?

Edit: Ich entschuldige meine Dummheit...ich hatte die Abfrage übersehen mit hasNextInt :( Nur aus reiner Neugier, warum funktioniert es mit hasNextInt nicht ?
 

Kirby.exe

Top Contributor
So ich habe alles so gut es geht angepasst, das sind meine fertigen Dateien:
Java:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Bank {
    @SuppressWarnings("resource")
    int BankID;
    String Bankname;
    ArrayList <Konto> Database = new ArrayList <Konto>();
    
    Bank(String name){
        this.BankID = 123456789;
        this.Bankname = name;
    }
    public final static Scanner sc = new Scanner(System.in);
    
    public static Integer getUserChoice() {
        try {
            return Integer.parseInt(sc.nextLine());
        } catch (NumberFormatException ex) {
            // Logging wäre noch interessant ...
            return null;
        }
    }
    
    void createAccount() {
        Konto gesuchtesKonto = new Konto();
        System.out.println("Geben sie den Kontoinhaber ein: ");
        gesuchtesKonto.kontoinhaber = sc.nextLine();
        System.out.println("Geben sie ihre gewünschte Kontonummer ein: ");
        int id = getUserChoice();
        if(findAccount(Database, id) != null) {
            System.out.println("Dieses Konto existiert bereits!");
            return;
        }
        gesuchtesKonto.kontonummer = id;
        gesuchtesKonto.kontostand = 0;
        Database.add(gesuchtesKonto);
        System.out.println("Ihr Konto wurde erfolgreich erstellt.");
    }
    
    void closeAccount(int id) {
        Konto gesuchtesKonto = findAccount(Database, id);
        if(gesuchtesKonto == null) {
            System.out.println("Dieses Konto existiert nicht!");
            return;
        }
        Database.remove(gesuchtesKonto);
        System.out.println("Ihr Konto wurde erfolgreich aufgelöst.");
    }
    
    Integer checkBalance(int id) {
        Konto gesuchtesKonto = findAccount(Database, id);
        if(gesuchtesKonto != null) {
            return gesuchtesKonto.kontostand;
        }
        System.out.println("Dieses Konto existiert nicht!");
        return null;
    }
    
    void withdraw(int id) {
        System.out.println("Geben sie den Betrag ein, welchen sie abheben wollen: ");
        int money = getUserChoice();
        Konto gesuchtesKonto = findAccount(Database, id);
        if (gesuchtesKonto == null) {
            System.out.println("Dieses Konto existiert nicht!");
            return;
        }
        gesuchtesKonto.kontostand = gesuchtesKonto.kontostand - money;
        System.out.println("Der Betrag wurde erfolgreich ausgezahlt. Ihr neuer Kontostand beträgt " + gesuchtesKonto.kontostand + " $.");   
    }
    
    void deposit(int id) {
        System.out.println("Geben sie den Betrag ein, welchen sie einzahlen wollen: ");
        int money = getUserChoice();
        Konto gesuchtesKonto = findAccount(Database, id);
        if(gesuchtesKonto == null) {
            System.out.println("Dieses Konto existiert nicht!");
            return;
        }
        gesuchtesKonto.kontostand = gesuchtesKonto.kontostand + money;
        System.out.println("Der Betrag wurde erfolgreich eingezahlt. Ihr neuer Kontostand beträgt " + gesuchtesKonto.kontostand + " $.");
    }
    
    void getAccountDetails(int id) {
        Konto gesuchtesKonto = findAccount(Database, id);
        if(gesuchtesKonto == null) {
            System.out.println("Dieses Konto existiert nicht!");
            return;
        }
        System.out.println("Kontoinhaber: " + gesuchtesKonto.kontoinhaber);
        System.out.println("Kontonummer: " + gesuchtesKonto.kontonummer);
        System.out.println("Kontostand: " + gesuchtesKonto.kontostand + "$");
    }
    
    public static Konto findAccount(List<Konto> kontoListe, int kontoNummer) {
        for(Konto konto: kontoListe) {
            if (konto.kontonummer == kontoNummer) {return konto;};
        }
        return null;
    }
}
Java:
public class Konto {
    public int kontostand;
    public int kontonummer;
    public String kontoinhaber;
}
Java:
import java.util.Scanner;

public class Testing {

    public static final Scanner sc = new Scanner(System.in);
    
    public static Integer getUserChoice() {
        try {
            return Integer.parseInt(sc.nextLine());
        } catch (NumberFormatException ex) {
            // Logging wäre noch interessant ...
            return null;
        }
    }
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Bank banking = new Bank("Postbank");
        String check = "";
        
        while(!(check.equals("Nein"))) {
            System.out.println("Welche Aktion wollen sie ausführen?  Geld einzahlen(1), Geld abheben(2), "
                    + " Zeige Kontoinformationen(3), " + "Neues Konto eröffnen(4), Konto schließen(5)");
                
            switch(getUserChoice()) {
                case 1:
                    System.out.println("Geben sie ihre Kontonummer ein: ");
                    banking.deposit(getUserChoice());
                    break;
                case 2:
                    System.out.println("Geben sie ihre Kontonummer ein: ");
                    banking.withdraw(getUserChoice());
                    break;
                case 3:
                    System.out.println("Geben sie ihre Kontonummer ein: ");
                    banking.getAccountDetails(getUserChoice());
                    break;
                case 4:
                    banking.createAccount();
                    break;   
                case 5:
                    System.out.println("Geben sie ihre Kontonummer ein: ");
                    banking.closeAccount(getUserChoice());
                    break;
                default:
                    System.out.println("Error! Input was false!");
                    break;
                }
            
            System.out.println("Wollen sie eine weiter Aktion durchführen? Geben sie Ja oder Nein ein.");
            check = sc.nextLine();
        }
    }
}
Ich überlege gerade noch wie ich beispielsweise eine Bankkarte implementiere, dass man diese "in den Automaten schiebt" und sozusagen die Kontonummer solange gleich bleibt, bis die Karte ausgeworfen wurde
 

Javinner

Top Contributor
@Kirby_Sike
Auch wenn es eventuell verfrüht ist, würde ich an deiner Stelle ein Builder für jeweilige Angelegenheit benutzen. Viel übersichtlicher, wie ich finde. Zudem lass es, in Methoden der Klassen Scanner einzubauen. Viel besser ist es, im Main-Menü die Abfragen zu tätigen, weil eben irgendwann hast du eine GUI dazu gebaut, dann lässt sich diese ohne großen Aufwand in den Code einbinden.
Ist schwer, alle wissen es.

Java:
public class BankDemo
{

    public static void main(String[] args)
    {
        Address address = new Address.AddressBuilder()
            .street("Patternstreet")
            .house(44).city("Patterncity")
            .zip(23265)
            .build();
        LocalDate localDate = LocalDate.of(1980, Month.MARCH, 22);
        CustomerData customerData = new CustomerData.CustomerDataBuilder()
            .firstName("Pat")
            .secondname("Bat")
            .gender("m")
            .birthdate(localDate)
            .address(address)
            .build();
        Customer customer = new Customer(customerData);
        BankCustomer bankCustomer = new BankCustomer(customer, false);
        Bank bank = new Bank();
        bank.addBankCustomer(bankCustomer);
    }

}

Zum Builder: Effective Java, 2nd Edition, sollte an jeder Ecke für Lau zu haben sein, da bereits eine Neue Edition draußen. Ich lege dir das Buch ans Herz!
 

Kirby.exe

Top Contributor
Werde ich nach der Klausurenphase in Angriff nehmen und lesen :)

Könntest du mir die Mathe, Python und Java Ordner vielleicht in eine ZIP Datei packen und irgendwie auf workupload hochladen? :D
 

Javinner

Top Contributor
in eine ZIP Datei packen und irgendwie auf workupload hochladen
Wäre laut Vereinbarung eine Straftat. Nichts für ungut, aber die besagten Bücher habe ich größtenteils erworben und das Weitergeben ist laut AGBs untersagt und wird geahndet. Den Rest habe ich mir hier und da für Lau geladen und hier ist der heiße Tipp: komm öfter mal vorbei, ab und an postet mal der oder die andere, aber eher selten, ein Buchtipp, welches es öfters mal für Lau gibt. Dieser hier ist ein Beispiel ;)

Wenn du aber eine oder andere Frage hast, werde ich sie dir beantworten.
 

Kirby.exe

Top Contributor
Wäre laut Vereinbarung eine Straftat. Nichts für ungut, aber die besagten Bücher habe ich größtenteils erworben und das Weitergeben ist laut AGBs untersagt und wird geahndet. Den Rest habe ich mir hier und da für Lau geladen und hier ist der heiße Tipp: komm öfter mal vorbei, ab und an postet mal der oder die andere, aber eher selten, ein Buchtipp, welches es öfters mal für Lau gibt.

Wenn du aber eine oder andere Frage hast, werde ich sie dir beantworten.
Ok ach kein Ding :) Wenn ich Fragen habe werde ich mich melden :)
 
X

Xyz1

Gast
Tipp: Wenn man den Scanner verwenden möchte so sollte man sich auf eine Methode zum Beispiel nextLine() festlegen. Das erspart unerwünschte Fehlerfälle und darüber hinaus zusatz Programmlogik.

@Javinner Du kannst mir nicht einen Teil Deiner Bücher schicken - oder? :D
 
K

kneitzel

Gast
Nur ganz am Rande: Gerade Englische Fachbücher sollen Gerüchten zufolge von irgendwelchen Leuten - vor allem in Russland und China - einfach so als PDF ins Netz gestellt werden und sollen sogar per Google oft problemlos auffindbar. Aber das ist natürlich nur ein Gerücht, das ich mal gehört habe ...

Wenn man aber wirklich viel Fachbücher lesen möchte, dann ist aus meiner Sicht eine Subscription top. Ich nutze eine Subscription vom packt Verlag für 9,99 US $ / Monat (99$ / Jahr) und bin damit sehr zufrieden. (Gibt dann auch jeden Monat ein Token, mit dem man ein Buch DRM Frei herunter laden kann!)

Das kommt nicht an das Angebot von O'Reilly heran, aber das kostet auch 43€/Monat bzw. 436€/Jahr, was mir zuviel erscheint. die 1-2 Bücher pro Monat kann man sich da dann auch direkt kaufen.... Es ist gut, wenn man in ein Buch hinein schnuppern will oder so, aber ansonsten lohnt sich der Betrag aus meiner Sicht nicht. Aber das Angebot ist berauschend - enthält eigentlich alles, was man sich so wünscht.

Diese Subscriptions haben vor allem Bücher auf Englisch. Das sollte einem natürlich bewusst sein.
 

lennero

Bekanntes Mitglied
Nur ganz am Rande: Gerade Englische Fachbücher sollen Gerüchten zufolge von irgendwelchen Leuten - vor allem in Russland und China - einfach so als PDF ins Netz gestellt werden und sollen sogar per Google oft problemlos auffindbar. Aber das ist natürlich nur ein Gerücht, das ich mal gehört habe ...

Wenn man aber wirklich viel Fachbücher lesen möchte, dann ist aus meiner Sicht eine Subscription top. Ich nutze eine Subscription vom packt Verlag für 9,99 US $ / Monat (99$ / Jahr) und bin damit sehr zufrieden. (Gibt dann auch jeden Monat ein Token, mit dem man ein Buch DRM Frei herunter laden kann!)

Das kommt nicht an das Angebot von O'Reilly heran, aber das kostet auch 43€/Monat bzw. 436€/Jahr, was mir zuviel erscheint. die 1-2 Bücher pro Monat kann man sich da dann auch direkt kaufen.... Es ist gut, wenn man in ein Buch hinein schnuppern will oder so, aber ansonsten lohnt sich der Betrag aus meiner Sicht nicht. Aber das Angebot ist berauschend - enthält eigentlich alles, was man sich so wünscht.

Diese Subscriptions haben vor allem Bücher auf Englisch. Das sollte einem natürlich bewusst sein.

Oder man zahlt die jährlichen Gebühren (~20€) und geht zur nächstgelegenen Uni. Man muss zwar ans verlängern denken aber dafür hat man ne viel größere Auswahl an Büchern.
 
K

kneitzel

Gast
Oder man zahlt die jährlichen Gebühren (~20€) und geht zur nächstgelegenen Uni. Man muss zwar ans verlängern denken aber dafür hat man ne viel größere Auswahl an Büchern.
Also größere Auswahl als bei O'Reilly Learning glaube ich kaum. Die sind was Fachbücher angeht sehr gut aufgestellt.

Für einen Studenten, der eh an der Hochschule ist, ist das kein Thema, aber ansonsten sind da auch Fahrzeiten einzurechnen - und dann kommt es mit dem Abo oder dem Bücher kaufen schon fast günstiger. Es sei denn, man versucht über Fernleihe das über eine lokale Bücherei zu machen, aber da kann man wohl nicht verlängern ...

Also auf jeden Fall ein guter Hinweis nur eben für mich nicht tauglich :)
 
X

Xyz1

Gast
Sorry, das mit den Büchern senden/schicken war nicht so gemeint - und ich weiß, dass das mitunter eine strafbare Handlung ist. :(
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C alle möglichen Kombinationen zweier Ziffern auf drei / vier / und 'n" Stellen Java Basics - Anfänger-Themen 11
J Erste Schritte Alle möglichen ausgaben von 5 Zahlen als Vector Java Basics - Anfänger-Themen 7
D Alle möglichen Kombinationen in einem Array ausgeben Java Basics - Anfänger-Themen 2
M Alle möglichen Strings Java Basics - Anfänger-Themen 5
D Alle möglichen Stringkombinationen aus bestimmtem Alphabet erzeugen Java Basics - Anfänger-Themen 6
Guybrush Threepwood String in alle möglichen Fragmente teilen Java Basics - Anfänger-Themen 2
C array alle möglichen Reihenfolgen Java Basics - Anfänger-Themen 6
C alle möglichen Datumseingaben im Textfeld abfangen Java Basics - Anfänger-Themen 12
C Alle Möglichen Kombinationen eines Arrays Java Basics - Anfänger-Themen 5
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
B Alle Strings bis zu einer Maimallänge aufzählen, die Bedingung erfüllen Java Basics - Anfänger-Themen 13
D Apache HTTPClient für alle Fälle Java Basics - Anfänger-Themen 41
missy72 Methoden Alle rekusiven Aufrufe abbrechen Java Basics - Anfänger-Themen 21
S IntelliJ geht alle Klassen durch Java Basics - Anfänger-Themen 9
B Alle Zahlen finden, die 3 bestimmte Ziffern enthalten? Java Basics - Anfänger-Themen 9
K wie kann ich alle Attribute von dem Objekt(pagode) ausgeben lassen ? Java Basics - Anfänger-Themen 3
I Greenscreen, funktioniert nicht zu 100%... nicht alle Pixel werden geändert Java Basics - Anfänger-Themen 1
Butzibu Image Loader lädt nicht alle Bilder: Java Basics - Anfänger-Themen 4
sserio Wieso werden nicht alle Primzahlen bis 1000 in meine Liste gepackt ? Java Basics - Anfänger-Themen 8
E Select nimmt nicht alle Where /AND befehlen an Java Basics - Anfänger-Themen 4
K Erste Schritte Wie schnell ist LinkedHashMap im Vergleich zur ArrayList, wenn alle Entries durchlaufen werden? Java Basics - Anfänger-Themen 47
R Methoden Eclipse schlägt mir nicht alle Möglichkeiten vor Java Basics - Anfänger-Themen 4
melisax Alle Möglichkeiten eines Wortes angeben Java Basics - Anfänger-Themen 3
B Programm, dass alle 3 Tage eine Webseite öffnet? Java Basics - Anfänger-Themen 20
J Alle .java Dateien von einem Verzeichnis in eine Zip speichern Java Basics - Anfänger-Themen 2
J Alle Dateien aus einem Verzeichnis laden Java Basics - Anfänger-Themen 10
Bademeister007 Operatoren Alle Zahlen einer ArrayList die durch 5 teilbar ist Java Basics - Anfänger-Themen 2
E Wie gebe ich alle Daten zwischen zwei Zeitpunkten aus? Java Basics - Anfänger-Themen 2
crrnogorka Letzte Zeile einer Tabelle "überschreibt" alle anderen Zeilen Java Basics - Anfänger-Themen 1
H Alle Geraden zahlen bis 10 ausgeben Java Basics - Anfänger-Themen 11
L Alle Ziele in einem Raster abknallen Java Basics - Anfänger-Themen 17
J Alle Werte eines Strings zusammen addieren Java Basics - Anfänger-Themen 15
S Laufzeit Quicksort wenn alle Elemente gleich sind Java Basics - Anfänger-Themen 4
B Alle Links in einem Text suchen und ersetzen mit einem neuen Link Java Basics - Anfänger-Themen 18
K Array alle Werte aufsummieren und ausgeben Java Basics - Anfänger-Themen 6
Dimax Erste Schritte String replace alle Zeichen Java Basics - Anfänger-Themen 10
L Wie vergrößere ich ein Rechteck in alle Richtungen um eins und bekomme dessen Rand? Java Basics - Anfänger-Themen 2
L Breadth-First Search statt einem Pfad, alle Pfade herausfinden Java Basics - Anfänger-Themen 4
X Erste Schritte String: Alle doppelten Leerzeilen entfernen Java Basics - Anfänger-Themen 21
M Regex-Ausdruck: Alle Zeichen bis auf ein bestimmtes erlauben (p{L}) Java Basics - Anfänger-Themen 5
I Alle Elemente von zwei Listen vergleichen Java Basics - Anfänger-Themen 1
M Unterklasse soll nicht alle Methoden erben Java Basics - Anfänger-Themen 3
V Erste Schritte for-Schleife; Ausgabe soll alle 5 Sekunden erfolgen. Java Basics - Anfänger-Themen 4
A Alle true Werte eines boolean Arrays herausfiltern Java Basics - Anfänger-Themen 19
D Alle Möglichkeiten, n-Anzahl aus Elementen aus einem Array zu wählen, ausgeben? Java Basics - Anfänger-Themen 23
M prüfen ob alle array werte gleich sind Java Basics - Anfänger-Themen 27
F Alle Zeichenkombinationen eines Strings iterativ herausfinden Java Basics - Anfänger-Themen 26
L Classpath Alle Dateien im Classpath finden Java Basics - Anfänger-Themen 4
G Überprüfen ob alle Ziffern von 1-9 in einem Integer vorhanden sind Java Basics - Anfänger-Themen 6
R Methoden Entferne alle identische Knoten (Typ String) aus verkettete Liste Java Basics - Anfänger-Themen 8
D Methoden Eigene Methode um alle Ausgaben aufzurufen Java Basics - Anfänger-Themen 17
F Ordner auf alle Unterdatein abfragen Java Basics - Anfänger-Themen 3
A In einem String alle Eigennamen zählen Java Basics - Anfänger-Themen 6
B Klassen Alle Unter-Objekte durchlaufen in der Hauptklasse Java Basics - Anfänger-Themen 10
W ArrayList löscht alle Elemente bis auf eines Java Basics - Anfänger-Themen 2
B Webservice -> alle parameter bekommen von form Java Basics - Anfänger-Themen 2
das_leon Alle Zeilen einer CSV-Datei auslesen Java Basics - Anfänger-Themen 1
C HashMap - alle keys haben values der letzten put-Anweisung Java Basics - Anfänger-Themen 3
F Eclipse alle Projekt weg Java Basics - Anfänger-Themen 6
V Alle Komponenten eines JPanels Java Basics - Anfänger-Themen 14
I gemeinsame Config-Datei für alle Windows-User Java Basics - Anfänger-Themen 5
H JButton - Wechsel der Textfarbe alle 500ms Java Basics - Anfänger-Themen 10
DaCrazyJavaExpert Alle Zahlenkombinationen aus 9 zahlen finden Java Basics - Anfänger-Themen 17
F Alle Objekte einer Klasse nach Eigenschaft durchsuchen Java Basics - Anfänger-Themen 8
M Alle Instanzen einer Klasse ansprechen Java Basics - Anfänger-Themen 4
S Problem: Array alle Einträge gleich Java Basics - Anfänger-Themen 10
Z Enter Taste alle 0,5 Sekunden ausführen Java Basics - Anfänger-Themen 1
U RegEx alle Kommas bei den Zahlen in Punkt umwandeln Java Basics - Anfänger-Themen 3
K alle Vorkommen einer bestimmten Ziffer in einer Zahl zählen Java Basics - Anfänger-Themen 2
X Minimax-Algorithmus über alle Kanten möglich? - Kanten darstellen Java Basics - Anfänger-Themen 1
C Alle Zweierpotenzen bis 2^10 ausgeben lassen Java Basics - Anfänger-Themen 15
B Alle Attribute von Klasse bekommen und ändern Java Basics - Anfänger-Themen 12
M Input/Output Alle Zeilen auslesen und in Variable speichern Java Basics - Anfänger-Themen 5
W Mozilla Thunderbird email an alle Kontakte Java Basics - Anfänger-Themen 3
F Methode alle 15min ausführen Java Basics - Anfänger-Themen 5
I Alle Laufwerke und deres Pfade ausgeben Java Basics - Anfänger-Themen 6
S Classpath: Alle .jars innerhalb eines Ordners einbinden Java Basics - Anfänger-Themen 4
G Alle Objekte und Variablen automatisch ausgeben Java Basics - Anfänger-Themen 7
I Programm, welches eine Textzeile einliest und alle darin enthaltenen Buchstaben umwandelt Java Basics - Anfänger-Themen 3
G Wie bekomme ich alle Ausgaben von runTime.exec() Java Basics - Anfänger-Themen 7
L Best Practice Alle Kombinationen aus Listenelementen, Anzahl Listen unterschiedlich Java Basics - Anfänger-Themen 6
M Compiler-Fehler Alle Methoden eines Interfaces Implementiert dennoch Fehler Java Basics - Anfänger-Themen 3
I Alle Zeitzonen in Liste speichern Java Basics - Anfänger-Themen 4
F alle 100ms Befehle ausführen Java Basics - Anfänger-Themen 26
M Alle Sublisten einer bestimmten Laenge berechnen Java Basics - Anfänger-Themen 2
F Alle DEMOS fast veraltet...? Java Basics - Anfänger-Themen 13
J Alle Leerzeichen aus String entfernen Java Basics - Anfänger-Themen 13
D Methoden Alle Siebenstelligen Primpalidrome von PI Java Basics - Anfänger-Themen 6
K Durch alle Attribute eines Objektes iterieren Java Basics - Anfänger-Themen 6
P Klassen Alle Strings einer ArrayList<eigeneKlasse> anspre Java Basics - Anfänger-Themen 2
W String von hinten alle drei Zeichen abschneiden und in umgekehrter Reihenfolge ausgeben. Java Basics - Anfänger-Themen 9
M Stürzen alle Rekursive Methoden irgendwann ab? Java Basics - Anfänger-Themen 11
J Alle Wörter der Länge n mit 0 und 1 Java Basics - Anfänger-Themen 17
T Alle Threads .notify() Java Basics - Anfänger-Themen 13
G Methoden Alle Objekte der ArrayList ausgeben funktioniert nicht. Java Basics - Anfänger-Themen 12
N Klassen Class nur einmal ausführen und sie speichert daten für alle anderen classes? Java Basics - Anfänger-Themen 3
M Klassen Auf Alle Array Methoden gleichzeitig zugreifen Java Basics - Anfänger-Themen 8
D Frame schließt gleich alle Frames Java Basics - Anfänger-Themen 5
T Wie mache ich einen Timer der alle 2 sekunden aufgerufen wird? Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben