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);