2012-02-27 3 views
-1

Я пытаюсь распечатать 2D-массив случайных чисел от 1 до 15 только один раз. Я смог распечатать массив, но только последовательно.Печать случайных чисел в 2D-массиве только один раз

int x =0; 
public void Numberbox(){ 
      int[][] a2 = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,x}}; 

    String output = ""; // Accumulate text here (should be StringBuilder). 
//... Print array in rectangular form using nested for loops. 
for (int row = 0; row < ROWS; row++) 
{ 
for (int col = 0; col < COLS; col++) 
{ 
output += " " + a2[row][col]; 
} 
output += "\n"; 
} 
    System.out.print(output); 


} 
+0

Что значит "только последовательно"? Ваш код будет распечатывать 4 строки по 4 номера каждый ... в чем же проблема? – DNA

+0

@DNA Я хочу, чтобы он печатал случайные числа в каждой строке, поэтому существует возможность повторения числа. –

ответ

2

Вы можете использовать коллекцию, например список, и использовать встроенную функцию перетасовки. Например:

public static void main(String... args) throws Exception { 
    List<Integer> list = new ArrayList<Integer>(); 
    for (int i = 0; i < 16; i++) { 
     list.add(i); 
    } 
    System.out.println(list); //[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] 
    Collections.shuffle(list); 
    System.out.println(list); //[11, 5, 10, 9, 7, 0, 6, 1, 3, 14, 2, 4, 15, 13, 12, 8] 

    int[][] a2 = new int[4][4]; 
    for (int i = 0; i < 4; i++) { 
     for (int j = 0; j< 4; j++) { 
      a2[i][j] = list.get(i*4 + j); 
     } 
    } 
    System.out.println(Arrays.deepToString(a2)); //[[11, 5, 10, 9], [7, 0, 6, 1], [3, 14, 2, 4], [15, 13, 12, 8]] 
} 
+0

Может ли Collections.shuffle (list) использоваться только с ArrayList? –

+0

Я отредактировал, чтобы вернуть результат в ваш 2D-массив. Любые причины, по которым вы хотите использовать массивы, а не коллекции? – assylias

+0

Я пытаюсь сделать программу-головоломку, где пользователь перемещает числа вокруг. Я использую матрицу 4x4, заполненную 15 номерами и пробелом. пробел будет управляться булевым оператором. Смогут ли коллекции сделать это? –

1

Я думаю, вы должны использовать Collections.shuffle() для своей цели.

1

Использование Random.nextInt() во внутреннем цикле для генерации случайных чисел:

public class RandomGrid 
{ 
    public static void main(String[] args) 
    { 
     Random r = new Random(); 
     int ROWS = 4; 
     int COLS = 3; 
     String output = ""; // Accumulate text here (should be StringBuilder). 
     for (int row = 0; row < ROWS; row++) 
     { 
      for (int col = 0; col < COLS; col++) 
      { 
       output += " " + r.nextInt(16); 
      } 
      output += "\n"; 
     } 
     System.out.print(output); 
    } 
} 

Пример вывода:

12 9 10 
8 7 3 
8 10 11 
15 14 3 
+0

Как я могу остановить число от повторения? –

+0

Вы сказали в своем комментарии выше, что хотите случайные числа, которые могут повториться! Если вы не хотите повторять, то другие ответы с использованием 'shuffle()' - это то, что вам нужно. – DNA

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