2016-09-27 22 views
-3

私は、整数の増分のために多くのケースを入れる必要があるシナリオです。私はこれをもっと効率的で読みやすくするためにどうすればいいのだろうと思っていましたか?変数「ボリューム」はフロートであるので、私はそれらを追加することはできませんswitch文をより効率的にするにはどうすればよいですか?

public static void volumeControl() { 
    int selection; 
    System.out.println("Volume. 1-10"); 
    selection = input.nextInt(); 
    switch (selection) { 
     case 1: volume = -10; 
      break; 
     case 2: volume = -8; 
      break; 
     case 3: volume = -6; 
      break; 
     case 4: volume = -4; 
      break; 
     case 5: volume = -2; 
      break; 
     case 6: volume = 0; 
      break; 
     case 7: volume = 2; 
      break; 
     case 8: volume = 4; 
      break; 
     case 9: volume = 5; 
      break; 
     case 10: volume = 6; 
      break; 
    } 

: は、ここでは、コードです!

+0

はスイッチワーキングですか? – emotionlessbananas

+0

Javaでは、キャストを別のタイプにタイプすることができます。これにより、ボリュームの粒度が小さくても問題が解決する場合があります。 – jostrander

+1

ケース9を6に、ケース10を8に変更した場合は、選択に基づいて音量を計算するのが簡単です。 –

答えて

7

あなたは、単に選択を使用、ボリューム値を含む、あなたのクラスのメンバーとして配列を宣言し、初期化することができ、配列へのインデックスとして入力:

float[10] volumeLookup = { -10, -8, ... }; 
... 
volume = volumeLookup[ selection - 1 ]; 
1

あなたは、この場合にMapを使用することができます。それらは基本的にkeyvaluesにマッピングするために使用されます。この場合、入力は特定の浮動小数点値にマップされる整数キーとして機能します。

public static void volumeControl() { 
    Map<Integer, Float> volume = new HashMap<>(); 
    volume.put(1, -10f); 
    volume.put(2, -8f); 
    volume.put(3, -6f); 
    volume.put(4, -4f); 
    volume.put(5, -2f); 
    volume.put(6, 0f); 
    volume.put(7, 2f); 
    volume.put(8, 4f); 
    volume.put(9, 5f); 
    volume.put(10, 6f); 

    int selection; 
    System.out.println("Volume. 1-10"); 
    selection = input.nextInt(); 

    System.out.println("volume: " + volume.get(selection)); 
} 
+0

'put'を呼び出すためにまだたくさんのコードが複製されています。 – Li357

+0

私は理解しています。 OPが問題にしているこれらのインプットだけが存在すれば、@Dave Costaのソリューションを使う方が良いと思います。しかし、OPが言ったように、無数のパターン**を持つ整数**がたくさんある場合は、それがそうであるためにMapを使う方が良いです。さらに、コードの行を減らすことが唯一の目的ならば、その配列を使うことができますが、読みやすさの問題を解決するわけではありません。 –

0

代わりのスイッチ、それはそのようにして、それが一度にすべての数字を救うだろう、あなたは配列に入力された数字を作ることによって、あなたのスペースを節約できます。

0

方法は、あなたのパフォーマンスをドラッグするために起こっている何度も何度もそれをやって、その可能な場合にだけ、

Map<int, float> volume = new HashMap<>(); 
    volume.put(1, -10f); 
    volume.put(2, -8f); 
    volume.put(3, -6f); 
    volume.put(4, -4f); 
    volume.put(5, -2f); 
    volume.put(6, 0f); 
    volume.put(7, 2f); 
    volume.put(8, 4f); 
    volume.put(9, 5f); 
    volume.put(10, 6f); 


public static void volumeControl(int selected) { 
    // Get the volume 
    // Notice I did not perform validation checks, if you have to please do it here. 
    volume.get(selected); 

    // Do whatever you need to set the volume 
} 

をrDがの答えを強化するためにどこかのマップを初期化します。

関連する問題