2017-06-16 10 views
-1

私はJavaを使い始めたばかりで、2次元配列から要素をランダムに選択する方法を書いています。配列にない 'ランダムな'戻り値はありますか?

52枚のカード(4枚のスイートでは13枚)の2次元配列を与え、ランダムに4枚を選択して合計を返します。

プログラムはほとんどの場合うまく動作しているように見えますが、時にはカード「0ダイヤモンド」を返すことがあります。これは配列の要素ではありません。メソッドを渡したので、ここで何が起こっているのか分かりません。どのようにそれが時には0を返して、

int [][] cards = {{2,3,4,5,6,7,8,9,10,11,12,13,14},{2,3,4,5,6,7,8,9,10,11,12,13,14}, 
      {2,3,4,5,6,7,8,9,10,11,12,13,14},{2,3,4,5,6,7,8,9,10,11,12,13,14}}; 
    int num1 = randomPick(cards); 
     sum = sum+num1; 

    switch(num1){ 
     case 11: System.out.print("Jack of "+ suite+", "); 
      break; 
     case 12: System.out.print("Queen of "+ suite+", "); 
      break; 
     case 13: System.out.print("King of "+ suite+", "); 
      break; 
     case 14: System.out.print("Ace of "+ suite+", "); 
      break; 
     default: System.out.print(num1+" of "+ suite+", "); 
      break;} 


    public static int randomPick(int[][] array){       
    int randrow = new Random().nextInt(array.length);    
    int randcol = new Random().nextInt(array[randrow].length);  
    switch (randrow){ 
    // Each row corresponds to a different suite of cards 
    case 1: 
     suite= "spades"; 
     break; 
    case 2: 
     suite = "hearts"; 
     break; 
    case 3: 
     suite = "diamonds"; 
     break; 
    case 0: 
     suite = "clubs"; 
     break; 
    }  
    int element =array[randrow][randcol]; 
    return(element);}  

あなたは0を見ることができるようにメソッドに渡された配列の要素ではありません。

私は、下記の関連するコードのほとんどは再現しますか?

+2

あなたの例のコードの一部が欠落している - あなたがコンパイルできない貼り付けたもの。 [MCVE](https://stackoverflow.com/help/mcve)を共有している場合は、コードを直接実行して問題を再現することができます。 – dimo414

+2

カードには「スイート」ではなく「スーツ」があります。 –

答えて

1

上記のrandomPickの実装は、すべての呼び出しで同じcards配列が渡された場合、0を返しません。

のように配列が変更され、randomPickが更新された配列で呼び出されるようですか?私は、例えば、elementが0の場合、ロギングやrandomPick方法でsysoutを追加することをお勧めします。:

int element =array[randrow][randcol]; 
if(element == 0){ 
    for(int[] arrayElement : array){ 
     System.out.println(Arrays.toString(arrayElement)); 
    } 
} 
関連する問題