2017-12-09 13 views
3

私は自動販売機を建設する必要があるこの宿題を持っており、すべての製品(A1、A2、A3 ..)に座標を割り当てて、ユーザーがコインの価値を入力すると、彼が選んだ製品私はまだプログラミングに私は今、この多くのif文をJavaで記述する方がいいですか?

変えるだけのものは座標で
if ("a1".equals(choice)) { 
    System.out.println("You chose SNICKERS!"); 
    if (money < 50) { 
     System.out.println("This is not enough money to buy this product"); 
    } else if (money >= 50) { 
     System.out.println(" Price = 50 Your change = " + (money - 50)); 
    } 
} 

(A1、A2、A3のような多くの文になってしまっている新たなんだので、はい、変化を計算する場合、a4、b1、b2など)と価格が含まれます。これを行うより良い方法は何でしょうか?

答えて

4

でなければならないことです。

Productというクラスを作成します。

class Product { 
    private String name; 
    private int price; 

    public String getName() { return name; } 
    public int getPrice() { return price; } 

    public Product(String name, int price) { 
     this.name = name; 
     this.price = price; 
    } 
} 

その後、中HashMap<String, Product>を作成し、製品とその座標のすべてを追加します。

:今

HashMap<String, Product> productMap = new HashMap<>(); 
productMap.put("A1", new Product("Snickers", 50)); 
productMap.put("A2", new Product("Something else", 40)); 
// do this for every coordinate... 

、あなたはこのコードを使用することができます

Product chosenProduct = productMap.get(choice); 
System.out.println("You chose " + chosenProduct.getName() + "!"); 
if (money < chosenProduct.getPrice()) { 
    System.out.println("This is not enough money to buy this product"); 
} else { 
    System.out.println(" Price = " + chosenProduct.getPrice() + " Your change = " + (money - chosenProduct.getPrice())); 
} 
+0

+1で平等をチェックすることしかできません。これは私が答えの終わりに向かって示唆していた解決策です。これがgusgusjonが取り組んでいる宿題にふさわしいとすれば、それは非常に一般的な解決策です。 – thesquaregroot

+0

それは本当にうまくいきます、ありがとう。ハッシュマップは本当に興味深く、かなり簡単に見える、私は間違いなくそれらについてもっと学ぶだろう。ありがとうございました! – gusgusjon

-3

スイッチケースが望ましい機能です。

switch(choice) { 
    case 'a' : <some code> 
     break; 
    case 'b': <some other code> 
     break; 
    default: <if none of the choices matched> 
} 

唯一の注意点は、お好みの値はあなたがより多くのオブジェクト指向のアプローチを使用することができcharまたはint

+1

他のプリミティブ型と 'String'が動作します。それに、スイッチ ' – shooqie

0

これはプログラミングの共通の瞬間です。インクはそれについてもっと良い方法があります。

多くの場所で同様のコード構造を使用している特定のケースでは、関数を使用してみる必要があります。変更されたパラメータのいくつかをとる同じクラスにプライベート関数を記述してみてください。複雑さの度合いによっては、多くのパラメータを持つ大きな関数で終わる可能性もありますが、これもあまり良くありません。それにもかかわらず、このような状況に遭遇したときには、まず関数を書くことがまず必要です。

2次的に、このコードセグメントが何をしているのかを検討してください。コード全体を置き換える汎用関数を作るのは理想的ではないかもしれませんが、小さな部分を行う関数を簡単に書くことができますか?もしそうなら、残りの部分を別の機能に簡単にすることができますか?類似したコードセグメントがある場合は、それらの差異を追跡し、それらの差異に対応する関数を作成してください。

最後に、現在のプログラミングレベルの範囲に応じて、選択肢の識別に役立つデータ構造を作成することができます。たとえば、それぞれの選択肢を格納できるマップと、ユーザーに応答する必要があるすべてのデータ(コスト、アイテム名など)を含む関連オブジェクトを作成できます。そのようなアプローチでは、すべてのオプションを簡単に事前に設定し、必要な出力を印刷するために関数の選択と呼び出しに関連付けられたデータセットを単純に参照するようにします。

最終的には、このような将来の状況は、プログラミングのレベルと選択肢の数、各選択肢に関連するデータの複雑さに大きく依存します。

あなたの本能を信じ続けても、彼らはあなたによく役立つでしょう。

+0

あなたの言っていることが分かります。私は製品や価格にさまざまな機能を使用しようとしましたが、かなり早く立ち往生してしまったので、これを行うためのさらに高度な方法が必要だと思いました。とにかく、ありがとう。 – gusgusjon

関連する問題