Random генерирует одинаковые числа - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Подскажите пожалуйста... Мне надо в одной из лабораторных работ сделать так, чтобы программа сохраняла в файл фигуры. Проблема заключается в том, что я хочу, чтобы они генерировались случайным образом, и в случайном порядке. Но программа генерирует(как правило) прямоугольники. В общем-я объявил переменную типа Random, и делаю переход к действию через switch в соответствии с тем, что получит этот самый Random. В моём случае, вариантов не много: Треугольники Прямоугольники При 1 - треугольники При 2 - прямоугольники Но так выходит, что программа, как правило, создаёт в большинстве своём одни и те же фигуры(сами фигуры то одинаковые, а данные разные)... Подскажите пожалуйста, как можно было бы увеличить кол-ство генерируемых фигур и сделать так, чтобы они генерировались действительно случайным образом, а не просто прямоугольники и 2-3 треугольника из 100 фигур?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace Лабораторная_Работа_16
{
    abstract class Class1 : IComparable
    {
        public Int32[] side_length;
        public String figure_color;
        abstract public Double get_area();
        virtual public void get_info(Int32 i)
        {
            Console.WriteLine("|{0,3}| {1,15}| {2,5}| {3,8}|", i.ToString(), "Многоугольник", this.get_area().ToString(), this.figure_color);
        }
        public Int32 CompareTo(Object obj)
        {
            Class1 objct = obj as Class1;
            if (this.get_area() > objct.get_area()) return 1;
            else if (this.get_area() < objct.get_area()) return -1;
            else return 0;
        }
    }
 
    class Class2 : Class1
    {
        public override void get_info(Int32 i)
        {
            Console.Write("|{0,3}| {1,15}| {2,7}| ", i.ToString(), "Прямоугольник", this.get_area().ToString());
            Console.ForegroundColor = (ConsoleColor)Enum.Parse(typeof(ConsoleColor), this.figure_color);
            Console.Write("{0,8}", this.figure_color);
            Console.ForegroundColor = ConsoleColor.White;
            Console.WriteLine("| {0} {1} {2} {3} |", this.side_length[0].ToString(), this.side_length[1].ToString(), this.side_length[2].ToString(), this.side_length[3].ToString());
        }
        public override double get_area()
        {
            Double result = new Double();
            result = 1;
            foreach (Int32 data in this.side_length) result *= data;
            return result;
        }
        public Class2()
        {
            this.side_length = new Int32[4];
        }
    }
 
    class Class3 : Class1
    {
        public override void get_info(Int32 i)
        {
            Console.Write("|{0,3}| {1,15}| {2,7}| ", i.ToString(), "Прямоугольник", this.get_area().ToString());
            Console.ForegroundColor = (ConsoleColor)Enum.Parse(typeof(ConsoleColor), this.figure_color);
            Console.Write("{0, 8}", this.figure_color);
            Console.ForegroundColor = ConsoleColor.White;
            Console.WriteLine("| {0} {1} {2} |", this.side_length[0].ToString(), this.side_length[1].ToString(), this.side_length[2].ToString());
        }
        public override double get_area()
        {
            double result = new double();
            result = this.side_length[0] * this.side_length[1];
            return result;
        }
        public Class3()
        {
            this.side_length = new Int32[3];
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            Class1[] massive;
            Random random = new Random();
            Int32 select = new Int32();
            Console.ForegroundColor = ConsoleColor.White;
            Console.WriteLine("[1] - Создать заново файл вместе с фигурами\n[2] - Загрузить уже готовые фигуры из файла");
            select = Convert.ToInt32(Console.ReadLine());
            Console.Clear();
            switch (select)
            {
                //При создании файла...
                case 1:
                    {
                        Int32 size = new Int32();
                        Console.WriteLine("Введите нужное кол-ство фигур для генерации:");
                        size = Convert.ToInt32(Console.ReadLine());
                        Console.Clear();
                        massive = new Class1[size];
                        StreamWriter FileRecord = new StreamWriter("D:\\Result.txt");
                        FileRecord.WriteLine(size.ToString());
                        for (int i = 0; i < size; i++)
                        {
                            switch (random.Next(1, 2))
                            {
                                case 1:
                                    {
                                        massive[i] = new Class2();
                                        {
                                            massive[i].side_length[0] = random.Next(1, 100);
                                            massive[i].side_length[1] = random.Next(1, 100);
                                            massive[i].side_length[2] = random.Next(1, 100);
                                            massive[i].side_length[3] = random.Next(1, 100);
                                            switch (random.Next(1, 16))
                                            {
                                                case 1: { massive[i].figure_color = Convert.ToString(ConsoleColor.Black); } break;
                                                case 2: { massive[i].figure_color = Convert.ToString(ConsoleColor.Blue); } break;
                                                case 3: { massive[i].figure_color = Convert.ToString(ConsoleColor.Cyan); } break;
                                                case 4: { massive[i].figure_color = Convert.ToString(ConsoleColor.DarkBlue); } break;
                                                case 5: { massive[i].figure_color = Convert.ToString(ConsoleColor.DarkCyan); } break;
                                                case 6: { massive[i].figure_color = Convert.ToString(ConsoleColor.DarkGray); } break;
                                                case 7: { massive[i].figure_color = Convert.ToString(ConsoleColor.DarkGreen); } break;
                                                case 8: { massive[i].figure_color = Convert.ToString(ConsoleColor.DarkMagenta); } break;
                                                case 9: { massive[i].figure_color = Convert.ToString(ConsoleColor.DarkRed); } break;
                                                case 10: { massive[i].figure_color = Convert.ToString(ConsoleColor.DarkYellow); } break;
                                                case 11: { massive[i].figure_color = Convert.ToString(ConsoleColor.Gray); } break;
                                                case 12: { massive[i].figure_color = Convert.ToString(ConsoleColor.Green); } break;
                                                case 13: { massive[i].figure_color = Convert.ToString(ConsoleColor.Magenta); } break;
                                                case 14: { massive[i].figure_color = Convert.ToString(ConsoleColor.Red); } break;
                                                case 15: { massive[i].figure_color = Convert.ToString(ConsoleColor.White); } break;
                                                case 16: { massive[i].figure_color = Convert.ToString(ConsoleColor.Yellow); } break;
                                            }
                                            FileRecord.WriteLine("{0} {1} {2} {3} {4}", massive[i].side_length[0].ToString(), massive[i].side_length[1].ToString(), massive[i].side_length[2].ToString(), massive[i].side_length[3].ToString(), massive[i].figure_color.ToString());
                                        }
                                    } break;
                                case 2:
                                    {
                                        massive[i] = new Class3();
                                        {
                                            massive[i].side_length[0] = random.Next(1, 100);
                                            massive[i].side_length[1] = random.Next(1, 100);
                                            massive[i].side_length[2] = random.Next(1, 100);
                                            switch (random.Next(1, 16))
                                            {
                                                case 1: { massive[i].figure_color = Convert.ToString(ConsoleColor.Black); } break;
                                                case 2: { massive[i].figure_color = Convert.ToString(ConsoleColor.Blue); } break;
                                                case 3: { massive[i].figure_color = Convert.ToString(ConsoleColor.Cyan); } break;
                                                case 4: { massive[i].figure_color = Convert.ToString(ConsoleColor.DarkBlue); } break;
                                                case 5: { massive[i].figure_color = Convert.ToString(ConsoleColor.DarkCyan); } break;
                                                case 6: { massive[i].figure_color = Convert.ToString(ConsoleColor.DarkGray); } break;
                                                case 7: { massive[i].figure_color = Convert.ToString(ConsoleColor.DarkGreen); } break;
                                                case 8: { massive[i].figure_color = Convert.ToString(ConsoleColor.DarkMagenta); } break;
                                                case 9: { massive[i].figure_color = Convert.ToString(ConsoleColor.DarkRed); } break;
                                                case 10: { massive[i].figure_color = Convert.ToString(ConsoleColor.DarkYellow); } break;
                                                case 11: { massive[i].figure_color = Convert.ToString(ConsoleColor.Gray); } break;
                                                case 12: { massive[i].figure_color = Convert.ToString(ConsoleColor.Green); } break;
                                                case 13: { massive[i].figure_color = Convert.ToString(ConsoleColor.Magenta); } break;
                                                case 14: { massive[i].figure_color = Convert.ToString(ConsoleColor.Red); } break;
                                                case 15: { massive[i].figure_color = Convert.ToString(ConsoleColor.White); } break;
                                                case 16: { massive[i].figure_color = Convert.ToString(ConsoleColor.Yellow); } break;
                                            }
                                            FileRecord.WriteLine("{0} {1} {2} {3}", massive[i].side_length[0].ToString(), massive[i].side_length[1].ToString(), massive[i].side_length[2].ToString(), massive[i].figure_color.ToString());
                                        }
                                    } break;
                            }
                        }
                        FileRecord.Close();
                    } break;
                //При чтении файла...
                default:
                    {
                        StreamReader FileOpened = new StreamReader("D:\\Result.txt");
                        Int32 index = new Int32();
                        massive = new Class1[Convert.ToInt32(FileOpened.ReadLine())];
                        while (!FileOpened.EndOfStream)
                        {
                            String FileOpenedLoadString;
                            FileOpenedLoadString = FileOpened.ReadLine();
                            String[] FileOpenedLoadStringMas = FileOpenedLoadString.Split(' ');
                            if (FileOpenedLoadStringMas.Length == 4)
                            {
                                massive[index] = new Class3();
                                massive[index].side_length[0] = Convert.ToInt32(FileOpenedLoadStringMas[0]);
                                massive[index].side_length[1] = Convert.ToInt32(FileOpenedLoadStringMas[1]);
                                massive[index].side_length[2] = Convert.ToInt32(FileOpenedLoadStringMas[2]);
                                massive[index].figure_color = Convert.ToString(FileOpenedLoadStringMas[3]);
                            }
                            else
                            {
                                massive[index] = new Class2();
                                massive[index].side_length[0] = Convert.ToInt32(FileOpenedLoadStringMas[0]);
                                massive[index].side_length[1] = Convert.ToInt32(FileOpenedLoadStringMas[1]);
                                massive[index].side_length[2] = Convert.ToInt32(FileOpenedLoadStringMas[2]);
                                massive[index].side_length[3] = Convert.ToInt32(FileOpenedLoadStringMas[3]);
                                massive[index].figure_color = Convert.ToString(FileOpenedLoadStringMas[4]);
                            }
                            index++;
                        }
                        FileOpened.Close();
                    } break;
            }
            //Сортировка массива матриц по возрастанию площадей
            //Сортировка выполнена методом пузырька
            /*
            {
                Class1 temp;
                for (int i = 0; i < massive.Length; i++)
                    for (int j = 0; j < massive.Length - 1; j++)
                        if (massive[j].get_area() > massive[j + 1].get_area())
                        {
                            temp = massive[j];
                            massive[j] = massive[j + 1];
                            massive[j + 1] = temp;
                        }
            }
             */
            for (int i = 0; i < Console.BufferWidth; i++) Console.Write("=");
            Console.WriteLine("|{0, 5} |{1, 16} |{2, 16} |{3, 16} |", "Номер", "Наименование", "Цвет", "Площадь");
            for (int i = 0; i < Console.BufferWidth; i++) Console.Write("=");
            for (int i = 0; i < massive.Length; i++)
            {
                for (int j = 0; j < Console.BufferWidth; j++) Console.Write("-");
                switch (massive[i].side_length.Length)
                {
                    case 3:
                        {
                            Console.Write("|{0, 5} |{1, 16} |", (i + 1).ToString(), "Треугольник");
                            Console.ForegroundColor = (ConsoleColor)Enum.Parse(typeof(ConsoleColor), massive[i].figure_color.ToString());
                            Console.Write("{0, 16}", massive[i].figure_color.ToString());
                            Console.ForegroundColor = ConsoleColor.White;
                            Console.WriteLine("|{0, 16} |", massive[i].get_area());
                        } break;
                    default:
                        {
                            Console.Write("|{0, 5} |{1, 16} |", (i + 1).ToString(), "Прямоугольник");
                            Console.ForegroundColor = (ConsoleColor)Enum.Parse(typeof(ConsoleColor), massive[i].figure_color.ToString());
                            Console.Write("{0, 16}", massive[i].figure_color.ToString());
                            Console.ForegroundColor = ConsoleColor.White;
                            Console.WriteLine("|{0, 16} |", massive[i].get_area());
                        } break;
                }
                for (int j = 0; j < Console.BufferWidth; j++) Console.Write("-");
            }
            for (int i = 0; i < Console.BufferWidth; i++) Console.Write("=");
            Console.ReadKey();
            Int32 FinalResult = new Int32();
            for (int i = 0; i < massive.Length; i++)
            {
                if ((massive[i].figure_color == ConsoleColor.Red.ToString()) && (massive[i].side_length.Length == 4))
                    FinalResult += Convert.ToInt32(massive[i].get_area());
            }
            Console.WriteLine("Итоговый результат = {0}", FinalResult.ToString());
            Console.ReadKey();
        }
    }
}
Конкретно проблема заключается здесь:
for (int i = 0; i < size; i++)
{
switch (random.Next(1, 2))
{
case 1:
{
//Как бы действие
} break;
case 2:
{
//Как бы действие
} break;
}
}
Скриншот работы программы:
http://www.cyberforum.ru/attachment....1&d=1391548873

Решение задачи: «Random генерирует одинаковые числа»

textual
Листинг программы
Random rndGen = new Random();
int one = 0, two = 0;
 
for (int i = 0; i < 100000; i++) {
    if (rndGen.Next(1, 4) % 2 == 0) // Должны получить 50/50?
        one++;
    else
        two++;
}
 
Console.WriteLine("Единиц: {0}\nДвоек: {1}", one, two);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.867 из 5
Похожие ответы