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