2016-12-08 3 views
-2

Я искал так долго, что перечисления полезны. В моем мнении есть переменные со многими ключевыми словами. Так что нужно программировать программу, что используется для управления банком. Мой Enum имеет 2 переменные EINZAHLUNG (депозит) и AUSZAHLUNG (выплат).У меня есть перечисление, но я не знаю, как я могу правильно использовать?

public enum Transaktionsart { 
    EINZAHLUNG,AUSZAHLUNG; 
} 

У меня есть класс Menue, который предоставляет возможность вызова Методов. Меню будет выбрано UserInput.

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")); 
    } 
} 

Метод geldEinzahlen() Оплачивает нужную сумму на счету. EINZAHLUNG.Это было бы изменить ArrayList, но сначала я хочу знать, почему я должен использовать перечисление.

public void geldEinzahlen(){ 

    System.out.println("Ihr aktueller Kontostand betreagt: " + konto.getKontoStand() +"€"); 
    double betrag = MeineEingabe.erfasseDouble("Wie viel wollen sie Einzahlen? "); 
    System.out.println(konto.getKontoStand() + betrag); 
} 

Метод geldAbheben() используется для уплаты пошлины со счета. Счет не может быть меньше 0 €. Это изменит ArrayList, но сначала я хочу знать, почему я должен использовать перечисление.

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"); 
    } 
} 

У меня есть файл csv.file, но я думаю, что это не так важно.

Итак, учитель хочет, чтобы я использовал перечисление, но в моем мнении это действительно бесполезно. Я хочу спросить сообщество Stackoverflow. Что я могу написать, например, что у меня есть использование перечислений.

Надеюсь, вы можете помочь и извините за мой плохой английский.

С наилучшими пожеланиями, Greentea

+0

в основном с [enum] (https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html) вы можете заменить свой «случай» 10 »:' чем-то вроде 'case Transaktionsart.EINZAHLUNG:'. прочитайте документы для получения дополнительной информации. –

ответ

2

кажется, что вам не хватает большой точки перечислений. Enum может содержать реализацию, поэтому использование enum позволяет избежать необходимости писать структуру переключателя/случая вообще.

Позвольте привести вас и пример. Извините, но я буду использовать английский в именах идентификаторов.

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); 
} 

Теперь очень легко использовать этот код:

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

Где transactionName и amount могут быть параметры.

+0

Transaction :: perform также может быть реализован с помощью конструктора, который принимает DoubleConsumer, чтобы он делегировал указанному потребителю один раз, когда функция execute() вызывается: public enum Transaction {DEPOSIT (сумма -> {/ * deposit * /}), PAYOUT (сумма -> {/ * депозит * /}); частный конечный исполнитель DoubleConsumer; public void perform (double amount) {performer.accept (amount); } private Transaction (исполнитель DoubleConsumer) {this.performer = performer; }} – srborlongan

+1

@srborlongan, java - это язык программирования общего назначения. Есть много решений для любой проблемы.Я просто хотел объяснить точку перечислений простым примером. – AlexR

+2

Я думаю, что здесь отсутствует (что может показаться вам слишком очевидным, но для OP это не так), заключается в том, что два метода: geldEinzahlen() '' geldAbheben() 'можно заменить на метод * one * требуемый параметр «Транзакция». Таким образом, этот метод может делать все, что является обычным явлением, то есть печатать старый баланс и запрашивать сумму транзакции, прежде чем делать что-то другое, то есть делегировать метод «выполнить» вашего ответа. – Holger

0

Альтернативная реализация @ AlexR отвечает, используя DoubleConsumers содержать Операцию :: выполнить реализацию для каждого перечисления:

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; 
    } 
} 

Используется в точно так же, как @ AlexR отвечает:

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

Я просто изменяю меню как перечисление. Я думаю, что все в порядке – GreenTea