2016-09-19 14 views
0

1から5までの数字をランダムに生成したいが、そのキャッチはランダムにそのcurrentFloorを生成すべきではない。私の問題は、ケース2では、ケース2から4までであり、それはランダム番号1、3、4を生成する必要があり、および5同じ論理1の間の数を生成し3とケース4ランダムに特定の数字を生成する

switch(currentFloor) { 
      //generates number from 2-5 
      case 1: 
       int destination1 = rand1.nextInt(3) + 2; 
       destElevator.add(destination1); 
       System.out.println(destElevator); 
       break; 
      case 2: 
      case 3: 
      case 4: 
      //generates number from 1-4 
      case 5: 
       int destination2 = rand1.nextInt(3) + 1; 
       destElevator.add(destination2); 
       System.out.println(destElevator); 
       break; 
     } 
+0

あなたは現在の床に乱数を比較するif文を使用することができます。それらが等しければ、それらが等しくないまで別の乱数を生成する。 –

答えて

3

の場合も同様と4の場合、numberが> = currentFloorの場合は1増加します。これはswitch文の前に計算できるようにすべての場合に有効です。

実際にコードから、この戦略を使用する場合は、switch文も必要ありません。

int destination = rand1.nextInt(4) + 1; 
if (destination >= currentFloor) { 
    destination++; 
} 
destElevator.add(destination) 
System.out.println(destElevator); 
+2

nextInt(3)をnextInt(4)に変更した場合、これは最高の答えだと思います。 nextIntは0以上n以下の数を生成することを忘れないでください。 –

+0

ありがとうございます!できます! – Temmie

0

ミャーはそれが仕事ができること: -

public int generator(int currentFloor){ 
    int result = currentFloor; 
    while(result == currentFloor){ 
     result = 1 + (int)(Math.random() * (5 - 1)); 
    } 
    return result; 
} 
+0

これは良い選択のようです。私はなぜ結果に1つを追加するのか尋ねることはできますか?これは潜在的にあなたを必要な範囲から外してしまう可能性があります。 –

+0

結果をキャストするのを忘れましたが、これはコンパイルされません。 – Kelvin

+1

@ethancodes:感謝の意を表します。特定の範囲内で乱数を生成する方法はたくさんあります。 1つのアプローチは 'Min +(Math.random()*(Max - Min))'を使うことです。利用可能な選択肢が多すぎますが、私はこれを好きです。もっと親切に理解するにはhttp://stackoverflow.com/questions/363681/generating-random-integers-in-a-specific-range –

関連する問題