2016-12-08 1 views
-2

私はどのような列挙型が有用であるかについて長い間探しています。私の意見には、多くのキーワードを持つ変数があります。したがって、銀行を管理するために使用されるプログラムをプログラミングする必要があります。 My Enumには2つの変数EINZAHLUNG(Deposit)とAUSZAHLUNG(Payout)があります。私はenumを持っていますが、どうすれば正しく使うことができますか?

public enum Transaktionsart { 
    EINZAHLUNG,AUSZAHLUNG; 
} 

私はメソッドを呼び出すために提供されるクラスMenueを持っています。 UserInputによってmenueが選択されます。

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を変更することになりますが、まず、なぜenumを使用すべきかを知りたいと思います。

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を変更することになりますが、まずなぜenumを使うべきかを知りたいのです。

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

:@ AlexRの答えとまったく同じように使用

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

基本的には[enum](https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html)で 'case" 10 ":'を 'case Transaktionsart.EINZAHLUNG:'のように置き換えることができます。より多くの情報のためのドキュメントを読む。 –

答えて

2

あなたが列挙型の大きなポイントを逃しているようです。 Enumには実装が含まれているので、enumを使用するとswitch/case構造体を書く必要がありません。

私に教えてください。私は失礼ですが、私は識別子の名前で英語を使用します。

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

transactionNameamount可能なパラメータ:

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

は、今ではこのコードを使用することは非常に簡単です。トランザクションを含むようにDoubleConsumersを使用して::各列挙型の実装を行う

+0

Transaction :: performは、perform()が呼び出された後に、そのコンシューマーに委譲するようにDoubleConsumerを受け入れるコンストラクターを持つことによって実装することもできます。public enum Transaction {DEPOSIT(amount - > {/ * deposit * /})、PAYOUT (金額 - > {/ *預金* /});プライベート最終DoubleConsumerパフォーマー; public void perform(double amount){パフォーマー.accept(金額); }プライベートトランザクション(DoubleConsumer performer){this.performer = performer; }} – srborlongan

+1

@srborlongan、javaは汎用プログラミング言語です。問題の解決方法はたくさんあります。enumのポイントを簡単な例で説明したかっただけです。 – AlexR

+2

私は、ここに欠けているものは(あなたにはあまりにも明白に見えるかもしれませんが、OPにはありません)、2つのメソッド 'geldEinzahlen()' 'geldAbheben()'を*所望の「トランザクション」をパラメータとして使用する。したがって、この方法では、異なる1つのことを行う前に、つまり、回答の「実行」メソッドに委任することで、古い残高を印刷して取引金額を尋ねるなど、共通するすべてのことを行うことができます。 – Holger

0

@ AlexRの答えの代わりの実装、:

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

私はenumとしてmenueを変更します。私はそれが大丈夫だと思う – GreenTea

関連する問題