我搜索的内容很长,因为枚举很有用。在我的意见中,有许多关键字的变量。所以必须编程一个用于管理银行的程序。我的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的社区。我可以写什么,例如我使用枚举。
我希望你能为我糟糕的英语提供帮助和抱歉。
最诚挚的问候, 绿茶
答案 0 :(得分:2)
似乎你错过了枚举的重点。枚举可以包含实现,因此使用枚举可以避免任何编写开关/案例结构的需要。
让我举个例子。请原谅,但我打算在标识符名称中使用英文。
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
可以是参数。
答案 1 :(得分:0)
@ AlexR的答案的替代实现,使用DoubleConsumers包含每个枚举的Transaction :: perform实现:
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)
;
.....