Member 13284925 Ответов: 3

Помещая нуль в середину случайного числа


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

Б И Н Г О
1 11 30 35 45
5 15 25 38 50
3 20 22 31 52

Теперь я хочу поставить звездочку (*) или нуль в среднем ряду.
что-то вроде этого:
Б И Н Г О
1 11 30 35 45
5 15 ноль 38 50
3 20 22 31 52.
КТО-НИБУДЬ МОЖЕТ ПОМОЧЬ?

Что я уже пробовал:

Random rand = new Random();
           HashSet<int> number1 = new HashSet<int>();
           HashSet<int> number2 = new HashSet<int>();
           HashSet<int> number3 = new HashSet<int>();
           HashSet<int> number4 = new HashSet<int>();
           HashSet<int> number5 = new HashSet<int>();
           int range1;
           int range2;
           int range3;
           int range4;
           int range5;
           Console.WriteLine("B  I   N   G   O");
           for (int i = 0; i <= 10; i++)
           {
               do
               {

                   range1 = rand.Next(0, 10);

               } while (number1.Contains(range1));
               number1.Add(range1);


               do
               {
                   range2 = rand.Next(11,21);
               } while (number2.Contains(range2));
               number2.Add(range2);

               do
               {
                   range3 = rand.Next(22,32);
               } while (number3.Contains(range3));

               number3.Add(range3);
               do
               {
                   range4 = rand.Next(33,43);
               } while (number3.Contains(range4));
               number4.Add(range4);

               do
               {
                   range5 = rand.Next(44, 54);
               } while (number5.Contains(range5));
               number5.Add(range5);

               Console.WriteLine("{0}  {1}  {2}  {3}  {4}",range1, range2,range3, range4, range5);
           }
           Console.ReadLine();
       }

BillWoodruff

Почему бы вам не сгенерировать два случайных индекса, один для строки, один для столбца, и в вашем цикле печати проверить, являются ли эти индексы текущими, и вставить туда "null"?

RickZeeland

Вы понизили голос за мое последнее решение ? если так, то я хотел бы знать почему.

3 Ответов

Рейтинг:
2

RickZeeland

Вот более эффективное решение:

Random rand = new Random();
List<int> list1 = new List<int> {0,1,2,3,4,5,6,7,8,9,10};
List<int> list2 = new List<int> {11,12,13,14,15,16,17,18,19,20,21};
List<int> list3 = new List<int> {22,23,24,25,26,27,28,29,30,31,32};
List<int> list4 = new List<int> {33,34,35,36,37,38,39,40,41,42,43};
List<int> list5 = new List<int> {44,45,46,47,48,49,50,51,52,53,54};

Console.WriteLine("B  I   N   G   O");

for (int i = 0; i <= 10; i++)
{
	string range3string;
	
	// Console.WriteLine("count = " + list1.Count);
	var r = rand.Next(0, list1.Count);
	int range1 = list1[r];
	list1.RemoveAt(r);
   
	r = rand.Next(0, list2.Count);
	int range2 = list2[r];
	list2.RemoveAt(r);
   
	r = rand.Next(0, list3.Count);
	int range3 = list3[r];
	list3.RemoveAt(r);
   
	r = rand.Next(0, list4.Count);
	int range4 = list4[r];
	list4.RemoveAt(r);
   
	r = rand.Next(0, list5.Count);
	int range5 = list5[r];
	list5.RemoveAt(r);
	
	if (i == 5)
		range3string = "NULL";
	else
		range3string = range3.ToString();

	Console.WriteLine("{0}  {1}  {2}  {3}  {4}",range1, range2, range3string, range4, range5);
}

Console.ReadLine();


BillWoodruff

Если вы исправляете или улучшаете свой первый ответ,нет необходимости публиковать второй.

Рейтинг:
2

RickZeeland

Вы можете использовать строковую переменную для range3, например range3string:

string range3string;

if (<your condition>)
  range3string = range3;
else
  range3string = "NULL";

Чтобы быть более конкретным:
Random rand = new Random();
            HashSet<int> number1 = new HashSet<int>();
            HashSet<int> number2 = new HashSet<int>();
            HashSet<int> number3 = new HashSet<int>();
            HashSet<int> number4 = new HashSet<int>();
            HashSet<int> number5 = new HashSet<int>();
            int range1;
            int range2;
            int range3;
            int range4;
            int range5;
            string range3string;

            Console.WriteLine("B  I   N   G   O");

            for (int i = 0; i <= 10; i++)
            {
                do
                {
                    
                    range1 = rand.Next(0, 10);
 
                } while (number1.Contains(range1));
                number1.Add(range1);
               
                do
                {
                    range2 = rand.Next(11,21);
                } while (number2.Contains(range2));
                number2.Add(range2);
 
                do
                {
                    range3 = rand.Next(22,32);
                } while (number3.Contains(range3));
                number3.Add(range3);

                do
                {
                    range4 = rand.Next(33,43);
                } while (number4.Contains(range4));
                number4.Add(range4);
 
                do
                {
                    range5 = rand.Next(44, 54);
                } while (number5.Contains(range5));
                number5.Add(range5);
 
                if (i == 5)
                  range3string = "NULL";
                else
                  range3string = range3.ToString();

                Console.WriteLine("{0}  {1}  {2}  {3}  {4}",range1, range2, range3string, range4, range5);
            }
            Console.ReadLine();
        }


Member 13284925

@RickZeeland не могли бы вы быть немного конкретнее, потому что я не понимаю, что вы сказали, может вписаться в мой код

Member 13284925

@RickZeeland вы не можете преобразовать int в string, это не сработает, братан. в любом случае спасибо

RickZeeland

Вы правы, те .ToString () отсутствовал, просто проверяя, обращаете ли вы внимание ;)

Member 13284925

Lool даже в этом случае он все равно не вставляет null..

RickZeeland

Это странно, можете ли вы поставить точку останова на range3string = " NULL";
и посмотреть, попадет ли эта линия ?
Вы уверены, что цикл for выполняется 10 раз ?

Рейтинг:
1

Patrice T

Будьте осторожны

} while (number3.Contains(range4));