2016-12-08 3 views
-2

Ich suche so lange nach was enums nützlich sind. In meiner Meinung gibt es Variablen mit vielen Schlüsselwörtern. Also muss ein Programm programmiert werden, was verwendet wird, um eine Bank zu verwalten. Meine Enum haben 2 Variablen EINZAHLUNG (Einzahlung) und AUSZAHLUNG (Auszahlung).Ich habe eine enum, aber ich weiß nicht, wie kann ich richtig verwenden?

public enum Transaktionsart { 
    EINZAHLUNG,AUSZAHLUNG; 
} 

Also habe ich eine Klasse Menü, die zur Verfügung steht, um die Methoden aufzurufen. Das Menü wird von einem UserInput ausgewählt.

public class Menue { 
    public void auswahlMenue() {   
     String auswahl; 
     do { 
      menuePunkte(); 
      auswahl = MeineEingabe.erfasseAuswahl("Auswahl: "); 

      switch (auswahl) { 
       case "10": 
        geldEinzahlen(); 
       break; 
       case "11": 
        geldAbheben(); 
       break; 
       case "15": 
        System.out.println("Das Programm wurde Beendet!!"); 
       break; 
      } 
     } while (!auswahl.equals("15")); 
    } 
} 

Die Methode geldEinzahlen() Bezahlt den gewünschten Betrag auf das Konto. EINZAHLUNG.Das wäre die ArrayList ändern, aber zuerst möchte ich wissen, warum ich Enum verwenden sollte.

Die Methode geldAbheben() wird verwendet, um eine Gebühr vom Konto zu bezahlen. Der Account darf nicht unter 0 € liegen. Das würde die ArrayList ändern, aber zuerst möchte ich wissen, warum ich enum verwenden soll.

public void geldAbheben(){ 

    double betrag = MeineEingabe.erfasseDouble("Wie viel wollen Sie abheben? "); 

    if(konto.getKontoStand() > betrag){ 

    } 
    else if (konto.getKontoStand() < betrag){ 
     System.out.println("Leider koennen Sie diesen Betrag nicht auszahlen"); 
    } 
} 

Ich habe csv.file, aber ich denke, dass es nicht so wichtig ist.

Also der Lehrer möchte, dass ich ein Enum verwende, aber in meinen Meinungen ist es wirklich nutzlos. Ich möchte die Community von Stackoverflow fragen. Was kann ich zum Beispiel schreiben, dass ich enums verwende?

Ich hoffe, Sie können mir helfen und tut mir leid für mein schlechtes Englisch.

Mit besten Grüßen, GreenTea

+0

im Grunde mit [enum] (https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html) könntest du deine 'case" 10 ":' mit etwas wie 'case Transaktionsart.EINZAHLUNG:' ersetzen. Lesen Sie die Dokumentation für weitere Informationen. –

Antwort

2

Es scheint, dass Sie den großen Punkt von Aufzählungen fehlen. Enum kann eine Implementierung enthalten, so dass die Verwendung von enum die Notwendigkeit, überhaupt eine Switch/Case-Struktur zu schreiben, vermeidet.

Lassen Sie mich Ihnen und ein Beispiel geben. Bitte entschuldigen Sie, aber ich werde Englisch in Namen von Kennungen verwenden.

public enum Transaction { 
    DEPOSIT { 
     @Override public void perform(double amount) { 
      // code that puts amount to deposit 
     } 
    }, 
    PAYOUT { 
     @Override public void perform(double amount) { 
      // code that pays specified amount 
     } 
    }, 
    ; 
    public abstract void perform(double amount); 
} 

Jetzt ist es sehr einfach, diesen Code zu verwenden:

...... 
Transaction.valueOf(transactionName).perform(amount); 
....... 

Wo transactionName und amount Parameter sein kann.

+0

Transaction :: perform kann auch implementiert werden, indem man einen Konstruktor hat, der einen DoubleConsumer akzeptiert, so dass er an diesen Konsumenten delegiert, sobald perform() aufgerufen wird: public enum Transaction {DEPOSIT (betrag -> {/ * deposit * /}), PAYOUT (Betrag -> {/ * Anzahlung * /}); privater finaler DoubleConsumer-Darsteller; public void perform (doppelte Menge) {performer.accept (Menge); } private Transaktion (DoubleConsumer-Darsteller) {this.performer = Darsteller; }} – srborlongan

+1

@srborlongan, Java ist eine allgemeine Programmiersprache. Es gibt viele Lösungen für jedes Problem.Ich wollte den Sinn von enums nur anhand eines einfachen Beispiels erklären. – AlexR

+2

Ich denke, was hier fehlt (was dir vielleicht zu offensichtlich erscheinen könnte, aber zum OP ist es nicht), ist, dass die beiden Methoden 'geldEinzahlen()' 'geldAbheben()' durch * eine * Methode ersetzt werden können die gewünschte 'Transaktion' als Parameter. So kann diese Methode all die Dinge tun, die üblich sind, d. H. Das alte Guthaben drucken und nach dem Transaktionsbetrag fragen, bevor diese einzelne Sache, die anders ist, d.h. durch Delegieren an die "Ausführen" -Methode Ihrer Antwort, ausgeführt wird. – Holger

0

Eine alternative Implementierung von @ Alexr Antwort, DoubleConsumers mit der Transaktion enthalten :: ausführen Implementierung für jede Enum:

public enum Transaction { 
    DEPOSIT(amount -> { 
    // deposit 
    }), 
    PAYOUT(amount -> { 
    // payout 
    }); 

    private final DoubleConsumer performer; 

    public void perform(final double amount) { 
    performer.accept(amount); 
    } 

    private Transaction(final DoubleConsumer performer) { 
    this.performer = performer; 
    } 
} 

in genau der gleichen Weise verwendet wie @ Alexr Antwort:

..... 
Transaction 
    .valueOf(transactionName) 
    .perform(amount) 
; 
..... 
+0

Ich ändere einfach das Menü als enum. Ich denke, das ist in Ordnung – GreenTea

Verwandte Themen