2013-10-04 4 views
1

저는 블랙 잭 프로그램을 만들고 있으며 프로그램 시작시 플레이어에게 임의의 카드를 제공하려고합니다. 이것은 처음에 플레이어에게 카드를 제공하기 위해 Java로 작성한 함수입니다.Java for 루프에서 난수 생성하기

public static int[][] initDeal(int NPlayers) 
    { 
     int hands[][] = new int[NPlayers][2]; 

     for(int a = 0; a<NPlayers; a++) 
     { 

      hands[a][0] = (int)Math.round((Math.random() * 13))-1; 
      hands[a][1] = (int)Math.round((Math.random() * 13))-1; 

     } 
     return hands; 
    } 

가 나는 임의 방법으로 문제와 각 플레이어의 두 장의 카드가 무작위로 생성되고 있지만 같은 루프, 모든 플레이어가 같은 카드를 처리하는이 있다고 생각.

+0

무엇이 당신의 질문입니까? – Masudul

+0

만약 내가 당신이라면, 당신의 다차원 배열을'Hand' 객체 나 뭔가의 목록이나 배열로 교체 할 것입니다. 모든 것을 훨씬 깨끗하게 만들 것입니다. – christopher

+0

왜'java.util.Random.nextInt (13)'을 사용하지 않습니까? – Mureinik

답변

1

'덱'카드가 있어야하고 무작위로 섞은 다음 덱에서 카드를 꺼내 플레이어에게 넘겨야합니다.

그렇지 않으면 동일한 카드를 두 번 처리 할 수 ​​있지만 실제 생활에서는 불가능합니다. (큰 데크는 사용할 수 있지만.)

public class Card { 
    public enum Suit {HEART, DIAMOND, CLUB, SPADE}; 
    public int getValue();   // Ace, Jack, Queen, King encoded as numbers also. 
} 

public class Deck { 
    protected List<Card> cardList = new ArrayList(); 

    public void newDeck() { 
     // clear & add 52 cards.. 
     Collections.shuffle(cardList); 
    } 
    public Card deal() { 
     Card card = cardList.remove(0); 
     return card; 
    } 
} 

당신은 임의의 정수를 생성해야 할 때 /, 당신은 반올림하지, 절단를 사용해야합니다. 그렇지 않으면 바닥 값은 절반 원하는 확률을해야합니다 ..

int y = Math.round(x) 
0 - 0.49 -> 0   // only half the probability of occurrence! 
0.5 - 1.49 -> 1 
1.5 - 2.49 -> 2 
.. 

단지 int 캐스팅 절단 할 Math 기능은 없습니다.

int faceValue = (int) ((Math.random() * 13)) + 1; 

또는 Random.nextInt (n) 함수를 사용하여이 작업을 수행 할 수 있습니다.

Random rand = new Random(); 
int faceValue = rand.nextInt(13) + 1; 

빈칸을 채우십시오.

0

java.util.RandomnextInt(n)을 사용해보세요. Where n = 13. 그러나 그 외모에 의해 문제는 다른 곳에있는 것으로 보입니다. 이 함수는 실제로 임의의 값을 반환하지만 다른 곳에서는 제대로 사용하지 않습니다.

관련 문제