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);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д