2014-11-03 5 views
1

Я сделал двумерный массив в C# со случайными числами, но я хочу, чтобы числа не повторялись Например, успешный вывод, дающий вход 4 (x), 4 (у), 15 (maxElem), будет:Случайный двухмерный массив неповторяющихся чисел C#

14 | 8 | 1 | 7

3 | 13 | 2 | 4

2 | 6 | 12 | 8

10 | 9 | 4 |

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace TwoDimensionArray 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      int x = 4; 
      int y = 4; 
      int[,] z = new int[x, y]; 

      Random r = new Random(); 
      for (int i = 0; i < x; i++) 
      { 
       for (int j = 0; j < y; j++) 
       { 
        z[i, j] = r.Next(1, 15); 
       } 
      } 
      for (int i = 0; i < x; i++) 
      { 
       for (int j = 0; j < y; j++) 
       { 
        if (i == 3 && j == 3) 
        { 
         Console.Write(" "); 
         break; 
        } 
        else 
        { 
         if (z[i, j] > 9) 
          Console.Write(z[i, j] + " "); 
         else 
          Console.Write(z[i, j] + " "); 
        } 
       } 
       Console.WriteLine(); 
      } 
      Console.ReadKey(); 
     } 
    } 
} 
+0

У вас есть проблемы с текущим кодом, который вы, возможно, не поняли, - путем генерации случайных чисел с 'r.Next (1, 15)' вы получите только значение от '1 .. 14', поскольку второй параметр является эксклюзивной верхней границей. Таким образом, пытаясь генерировать 16 чисел из пула из 14, вы получаете ** дубликаты **. – Enigmativity

ответ

1

Сформировать массив, содержащий действительные числа, то use a shuffle algorithm рандомизировать порядок в массиве, а затем, наконец, заполнить ваш двумерный массив, извлекая для того, значения из вашего перемешиваются массива.

0

Попробуйте сделать это следующим образом:

int x = 4; 
int y = 4; 
int[,] z = new int[x, y]; 

Random r = new Random(); 

var values = 
    Enumerable 
     .Range(1, x * y) 
     .OrderBy(n => r.Next()) 
     .ToArray(); 

for (int i = 0; i < x; i++) 
{ 
    for (int j = 0; j < y; j++) 
    { 
     z[i, j] = values[i * 4 + j]; 
    } 
} 
Смежные вопросы