Home > Software engineering >  How to correctly replace random numbers in a two-dimensional array with symbols
How to correctly replace random numbers in a two-dimensional array with symbols

Time:11-13

I have created a two-dimensional array with random filling of numbers not exceeding 1. I need to replace the numbers: "0" with the character "_", and "1" with the character "*". I can't do it at all. How do I do it right..?

Console.Write("Enter the width of the field: ");
int q = Convert.ToInt32(Console.ReadLine());

Console.Write("Enter the length of the field: ");
int w = Convert.ToInt32(Console.ReadLine());

int[,] myArray = new int[q, w];
Random rand = new Random();

for (int i = 0; i < q; i  )
{
    for (int j = 0; j < w; j  )
    {
        myArray[i, j] = rand.Next(2);

        if (i == 0)
        {
            Regex regex = new Regex(myArray[i, j]);
            regex.Replace("_", myArray[i, j]);
        }

        if (j == 1)
        {
            Regex regex = new Regex(myArray[i, j]);
            regex.Replace("*", myArray[i, j]);
        }

        Console.Write(myArray[i, j]);
    }
    Console.WriteLine();
}

CodePudding user response:

You can't replace int by char since c# is statically typed (unless you use dynamic).

If you want to fill with random _ and *, those are characters, then you want to use a character array:

var rand = new Random();
var charArray = new char[q, w];
for (int i = 0; i < q; i  )
for (int j = 0; j < w; j  )
    charArray[i, j] = rand.Next(2) == 0 ? '_':'*';

If you want both int and char arrays, you need to declare both, and you may fill them together or separately:

var charArray = new char[q, w];
var intArray = new int[q, w];
for (int i = 0; i < q; i  )
for (int j = 0; j < w; j  )
{
    intArray[i, j] = rand.Next(2);
    charArray[i, j] = intArray[i, j] == 0 ? '_':'*';
}

If you want to do a replace, you want to use char all the time:

var charArray = new char[q, w];
for (int i = 0; i < q; i  )
for (int j = 0; j < w; j  )
    charArray[i, j] = rand.Next(2) == 0 ? '0':'1';

for (int i = 0; i < q; i  )
for (int j = 0; j < w; j  )
    charArray[i, j] = charArray[i, j] == '0' ? '_':'*';

My piece of advice is to keep regex, which is slower, for actual complex replacements (with wildcard, logical or, grouping, quantification) within strings (with double quote "my string").

CodePudding user response:

Try this:

for (int i = 0; i < q; i  )
{
    for (int j = 0; j < w; j  )
    {
        int randomValue = rand.Next(2);

        myArray[i, j] = randomValue == 0 ? "_" : "*";

        Console.Write(myArray[i, j]);
    }

    Console.WriteLine();
}
  •  Tags:  
  • c#
  • Related