2015-07-29 1 views
0

Это первый раз, когда я использую java, и я должен создать игру, используя эту программу. 2-мерный массив размером от 10 до 10, 5 конкретных символов - C, M, W, F и E. Каждый из них содержит 15 C, M, W, F, остальные 40 ящиков заняты E. Позиции генерируются случайным образом. Есть идеи?Как назначить определенный символ произвольно сгенерированной позиции в массиве 2d? (java)

+0

Что все, что вы пытались показать, что тогда кто-то сможет помочь you.Stackoverflow сайт не назначать свою работу кому-то другому. –

+0

Я дам вам подсказку: сначала создайте массив вручную, а затем перетасуйте его. –

+0

@Harout: это неэффективно. Я думаю, что я бы заполнил массив «E», используя Arrays.fill(), а затем положил других символов в случайные позиции. –

ответ

0

Один из способов состоит в том, чтобы пройти через массив и заполнить один из «C, M, W, F, E», пока они не будут индивидуально 15. Что вы можете сделать, это:

int randomWithRange(int min, int max) 
{ 
    int range = (max - min) + 1;  
    return (int)(Math.random() * range) + min; 
} 

так что вы можете ввести диапазон как randomWithRange (1,5) и заполнить символ в определенной позиции. т.е.: c = 1, M = 2, W = 3 ....

Как только все 15 комплектов завершены для 1 символа, проигнорируйте это и заполните другим символом «C, M, W или F». Если 15 заполнено для заполнения, заполните E

Вам необходимо будет полностью написать эту логику в соответствии с вашими требованиями. Ответ, если вам нужна помощь. Я не буду давать вам код.

0

Это рабочий раствор:

import java.util.*; 

public class Board { 

    private List<Character> values = new ArrayList<>(); 
    private char[][] rows = new char[10][10]; 
    private int index; 

    public void setup() { 
     initializeValues(); 
     fillRows(); 
    } 

    private void initializeValues() { 
     add(15, 'C'); 
     add(15, 'M'); 
     add(15, 'W'); 
     add(15, 'F'); 
     add(40, 'E'); 
     Collections.shuffle(values); 
    } 

    private void fillRows() { 
     for (int y = 0; y < rows.length; y++) { 
      fillRow(rows[y]); 
      if (index > values.size()) { 
       break; 
      } 
     } 
    } 

    private void fillRow(char[] row) { 
     for (int x = 0; x < row.length; x++) { 
      row[x] = values.get(index++); 
      if (index > values.size()) { 
       break; 
      } 
     } 
    } 

    private void add(int amount, char value) { 
     for (int i = 0; i < amount; i++) { 
      values.add(value); 
     } 
    } 

    private void print() { 
     for (char[] row : rows) { 
      System.out.println(Arrays.toString(row)); 
     } 
    } 

    public static void main(String[] args) { 
     Board board = new Board(); 
     board.setup(); 
     board.print(); 
    } 
} 
Смежные вопросы