2014-11-20 8 views
0

Это проект для школы. Это игра в бинго, и инструкции для части, над которой я работаю, - это заполнить карту Bingo с использованием 2D-массива. Первый столбец (B) должен иметь случайные числа от 1 до 15 без повторения номеров. Вторая (I) колонна должна иметь рандомы от 16 до 30, третий (N) от 31 до 45 и так далее. У меня он настроен для заполнения и отображения карт, но я получаю повторы. Я не могу понять, как проверить случайное число против каждой строки в конкретном столбце, чтобы узнать, было ли оно уже использовано, и изменить это число по мере необходимости. Я понимаю, что мне нужно делать логически, но я не знаю, как его кодировать. В разделе B, где я пытался начать работу. Я пробовал много вещей, но безуспешно. Вот мой код, пожалуйста, помогите:Заполните столбцы 2D-массива уникальными случайными числами Java

import java.util.Random; 

public class BingoCard 
{ 
    Random randNum = new Random(); 
    int[][] numberCard = new int[5][5]; 
    boolean[][] shadowCard = new boolean[5][5]; 

    /** Constructor */ 
    // set up 2D arrays for bingo cards, and card comparison 
    public BingoCard() 
    { 
    // create number card 
    // fill B column with random numbers from 1 to 15 
    for(int i = 0; i < numberCard.length; i++) 
    { 
     this.numberCard[i][0] = randInt(1, 15); 
     // check for double numbers and recall a random 
     while(this.numberCard[i][0] != numberCard[i][0]) 
     { 
      i++; 
     } 
     if(this.numberCard[i][0] == numberCard[i][0]) 
     { 
      numberCard[i][0] = randInt(1, 15); 
     } 
    } 
    // fill I column with random numbers from 16 to 30 
    for(int j = 0; j < numberCard.length; j++) 
    { 
     numberCard[j][1] = randInt(16, 30); 
     // check for double numbers and recall a random 

    } 
    // fill N column with random numbers from 31 to 45 
    for(int k = 0; k < numberCard.length; k++) 
    { 
     numberCard[k][2] = randInt(31, 45); 
     numberCard[2][2] = 0; // free space 
     // check for double numbers and recall a random 

    } 
    // fill G column with random numbers from 46 to 60 
    for(int m = 0; m < numberCard.length; m++) 
    { 
     numberCard[m][3] = randInt(46, 60); 
     // check for double numbers and recall a random 

    } 
    // fill O column with random numbers from 61 to 75 
    for(int n = 0; n < numberCard.length; n++) 
    { 
     numberCard[n][4] = randInt(61, 75); 
     // check for double numbers and recall a random 

    } 

    // create shadow card to compare to main card 
    for(int i = 0; i < shadowCard.length; i++) 
    { 
     for(int j = 0; j < 5; j++) 
     { 
      shadowCard[i][j] = false; 
      shadowCard[2][2] = true; 
     } 
    } 

    } 

/** Methods */ 

// method to generate a random number in intervals 
private int randInt(int min, int max) 
{ 
    int random; 
    random = randNum.nextInt(max - min) + min; 
    return random; 
} 

// method to print the numberCard 
public String printNumCard() 
{ 
    String string = ""; 
    for(int row = 0; row < numberCard.length; row++) 
    { 
     for(int col = 0; col < numberCard[row].length; col++) 
     { 
      System.out.print(numberCard[row][col] + " "); 
     } 
     System.out.println(); 
    } 
    return string; 
} 




    /** main method for testing */ 
    public static void main(String[] args) 
    { 
     BingoCard bc = new BingoCard(); 
     bc.printNumCard(); 

    } 


} 

ответ

0

Выставьте векторы заполнены значениями в допустимых пределах, и shuffle их. Затем выберите первый N перетасованного набора, где N - количество значений в данном столбце бинго-карты и скопируйте их в этот столбец.

Смежные вопросы