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

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

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

Здравствуйте! Подскажите пожалуйста... Мне надо в одной из лабораторных работ сделать так, чтобы программа сохраняла в файл фигуры. Проблема заключается в том, что я хочу, чтобы они генерировались случайным образом, и в случайном порядке. Но программа генерирует(как правило) прямоугольники. В общем-я объявил переменную типа Random, и делаю переход к действию через switch в соответствии с тем, что получит этот самый Random. В моём случае, вариантов не много: Треугольники Прямоугольники При 1 - треугольники При 2 - прямоугольники Но так выходит, что программа, как правило, создаёт в большинстве своём одни и те же фигуры(сами фигуры то одинаковые, а данные разные)... Подскажите пожалуйста, как можно было бы увеличить кол-ство генерируемых фигур и сделать так, чтобы они генерировались действительно случайным образом, а не просто прямоугольники и 2-3 треугольника из 100 фигур?
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.IO;
  7. namespace Лабораторная_Работа_16
  8. {
  9. abstract class Class1 : IComparable
  10. {
  11. public Int32[] side_length;
  12. public String figure_color;
  13. abstract public Double get_area();
  14. virtual public void get_info(Int32 i)
  15. {
  16. Console.WriteLine("|{0,3}| {1,15}| {2,5}| {3,8}|", i.ToString(), "Многоугольник", this.get_area().ToString(), this.figure_color);
  17. }
  18. public Int32 CompareTo(Object obj)
  19. {
  20. Class1 objct = obj as Class1;
  21. if (this.get_area() > objct.get_area()) return 1;
  22. else if (this.get_area() < objct.get_area()) return -1;
  23. else return 0;
  24. }
  25. }
  26. class Class2 : Class1
  27. {
  28. public override void get_info(Int32 i)
  29. {
  30. Console.Write("|{0,3}| {1,15}| {2,7}| ", i.ToString(), "Прямоугольник", this.get_area().ToString());
  31. Console.ForegroundColor = (ConsoleColor)Enum.Parse(typeof(ConsoleColor), this.figure_color);
  32. Console.Write("{0,8}", this.figure_color);
  33. Console.ForegroundColor = ConsoleColor.White;
  34. 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());
  35. }
  36. public override double get_area()
  37. {
  38. Double result = new Double();
  39. result = 1;
  40. foreach (Int32 data in this.side_length) result *= data;
  41. return result;
  42. }
  43. public Class2()
  44. {
  45. this.side_length = new Int32[4];
  46. }
  47. }
  48. class Class3 : Class1
  49. {
  50. public override void get_info(Int32 i)
  51. {
  52. Console.Write("|{0,3}| {1,15}| {2,7}| ", i.ToString(), "Прямоугольник", this.get_area().ToString());
  53. Console.ForegroundColor = (ConsoleColor)Enum.Parse(typeof(ConsoleColor), this.figure_color);
  54. Console.Write("{0, 8}", this.figure_color);
  55. Console.ForegroundColor = ConsoleColor.White;
  56. Console.WriteLine("| {0} {1} {2} |", this.side_length[0].ToString(), this.side_length[1].ToString(), this.side_length[2].ToString());
  57. }
  58. public override double get_area()
  59. {
  60. double result = new double();
  61. result = this.side_length[0] * this.side_length[1];
  62. return result;
  63. }
  64. public Class3()
  65. {
  66. this.side_length = new Int32[3];
  67. }
  68. }
  69. class Program
  70. {
  71. static void Main(string[] args)
  72. {
  73. Class1[] massive;
  74. Random random = new Random();
  75. Int32 select = new Int32();
  76. Console.ForegroundColor = ConsoleColor.White;
  77. Console.WriteLine("[1] - Создать заново файл вместе с фигурами\n[2] - Загрузить уже готовые фигуры из файла");
  78. select = Convert.ToInt32(Console.ReadLine());
  79. Console.Clear();
  80. switch (select)
  81. {
  82. //При создании файла...
  83. case 1:
  84. {
  85. Int32 size = new Int32();
  86. Console.WriteLine("Введите нужное кол-ство фигур для генерации:");
  87. size = Convert.ToInt32(Console.ReadLine());
  88. Console.Clear();
  89. massive = new Class1[size];
  90. StreamWriter FileRecord = new StreamWriter("D:\\Result.txt");
  91. FileRecord.WriteLine(size.ToString());
  92. for (int i = 0; i < size; i++)
  93. {
  94. switch (random.Next(1, 2))
  95. {
  96. case 1:
  97. {
  98. massive[i] = new Class2();
  99. {
  100. massive[i].side_length[0] = random.Next(1, 100);
  101. massive[i].side_length[1] = random.Next(1, 100);
  102. massive[i].side_length[2] = random.Next(1, 100);
  103. massive[i].side_length[3] = random.Next(1, 100);
  104. switch (random.Next(1, 16))
  105. {
  106. case 1: { massive[i].figure_color = Convert.ToString(ConsoleColor.Black); } break;
  107. case 2: { massive[i].figure_color = Convert.ToString(ConsoleColor.Blue); } break;
  108. case 3: { massive[i].figure_color = Convert.ToString(ConsoleColor.Cyan); } break;
  109. case 4: { massive[i].figure_color = Convert.ToString(ConsoleColor.DarkBlue); } break;
  110. case 5: { massive[i].figure_color = Convert.ToString(ConsoleColor.DarkCyan); } break;
  111. case 6: { massive[i].figure_color = Convert.ToString(ConsoleColor.DarkGray); } break;
  112. case 7: { massive[i].figure_color = Convert.ToString(ConsoleColor.DarkGreen); } break;
  113. case 8: { massive[i].figure_color = Convert.ToString(ConsoleColor.DarkMagenta); } break;
  114. case 9: { massive[i].figure_color = Convert.ToString(ConsoleColor.DarkRed); } break;
  115. case 10: { massive[i].figure_color = Convert.ToString(ConsoleColor.DarkYellow); } break;
  116. case 11: { massive[i].figure_color = Convert.ToString(ConsoleColor.Gray); } break;
  117. case 12: { massive[i].figure_color = Convert.ToString(ConsoleColor.Green); } break;
  118. case 13: { massive[i].figure_color = Convert.ToString(ConsoleColor.Magenta); } break;
  119. case 14: { massive[i].figure_color = Convert.ToString(ConsoleColor.Red); } break;
  120. case 15: { massive[i].figure_color = Convert.ToString(ConsoleColor.White); } break;
  121. case 16: { massive[i].figure_color = Convert.ToString(ConsoleColor.Yellow); } break;
  122. }
  123. 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());
  124. }
  125. } break;
  126. case 2:
  127. {
  128. massive[i] = new Class3();
  129. {
  130. massive[i].side_length[0] = random.Next(1, 100);
  131. massive[i].side_length[1] = random.Next(1, 100);
  132. massive[i].side_length[2] = random.Next(1, 100);
  133. switch (random.Next(1, 16))
  134. {
  135. case 1: { massive[i].figure_color = Convert.ToString(ConsoleColor.Black); } break;
  136. case 2: { massive[i].figure_color = Convert.ToString(ConsoleColor.Blue); } break;
  137. case 3: { massive[i].figure_color = Convert.ToString(ConsoleColor.Cyan); } break;
  138. case 4: { massive[i].figure_color = Convert.ToString(ConsoleColor.DarkBlue); } break;
  139. case 5: { massive[i].figure_color = Convert.ToString(ConsoleColor.DarkCyan); } break;
  140. case 6: { massive[i].figure_color = Convert.ToString(ConsoleColor.DarkGray); } break;
  141. case 7: { massive[i].figure_color = Convert.ToString(ConsoleColor.DarkGreen); } break;
  142. case 8: { massive[i].figure_color = Convert.ToString(ConsoleColor.DarkMagenta); } break;
  143. case 9: { massive[i].figure_color = Convert.ToString(ConsoleColor.DarkRed); } break;
  144. case 10: { massive[i].figure_color = Convert.ToString(ConsoleColor.DarkYellow); } break;
  145. case 11: { massive[i].figure_color = Convert.ToString(ConsoleColor.Gray); } break;
  146. case 12: { massive[i].figure_color = Convert.ToString(ConsoleColor.Green); } break;
  147. case 13: { massive[i].figure_color = Convert.ToString(ConsoleColor.Magenta); } break;
  148. case 14: { massive[i].figure_color = Convert.ToString(ConsoleColor.Red); } break;
  149. case 15: { massive[i].figure_color = Convert.ToString(ConsoleColor.White); } break;
  150. case 16: { massive[i].figure_color = Convert.ToString(ConsoleColor.Yellow); } break;
  151. }
  152. 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());
  153. }
  154. } break;
  155. }
  156. }
  157. FileRecord.Close();
  158. } break;
  159. //При чтении файла...
  160. default:
  161. {
  162. StreamReader FileOpened = new StreamReader("D:\\Result.txt");
  163. Int32 index = new Int32();
  164. massive = new Class1[Convert.ToInt32(FileOpened.ReadLine())];
  165. while (!FileOpened.EndOfStream)
  166. {
  167. String FileOpenedLoadString;
  168. FileOpenedLoadString = FileOpened.ReadLine();
  169. String[] FileOpenedLoadStringMas = FileOpenedLoadString.Split(' ');
  170. if (FileOpenedLoadStringMas.Length == 4)
  171. {
  172. massive[index] = new Class3();
  173. massive[index].side_length[0] = Convert.ToInt32(FileOpenedLoadStringMas[0]);
  174. massive[index].side_length[1] = Convert.ToInt32(FileOpenedLoadStringMas[1]);
  175. massive[index].side_length[2] = Convert.ToInt32(FileOpenedLoadStringMas[2]);
  176. massive[index].figure_color = Convert.ToString(FileOpenedLoadStringMas[3]);
  177. }
  178. else
  179. {
  180. massive[index] = new Class2();
  181. massive[index].side_length[0] = Convert.ToInt32(FileOpenedLoadStringMas[0]);
  182. massive[index].side_length[1] = Convert.ToInt32(FileOpenedLoadStringMas[1]);
  183. massive[index].side_length[2] = Convert.ToInt32(FileOpenedLoadStringMas[2]);
  184. massive[index].side_length[3] = Convert.ToInt32(FileOpenedLoadStringMas[3]);
  185. massive[index].figure_color = Convert.ToString(FileOpenedLoadStringMas[4]);
  186. }
  187. index++;
  188. }
  189. FileOpened.Close();
  190. } break;
  191. }
  192. //Сортировка массива матриц по возрастанию площадей
  193. //Сортировка выполнена методом пузырька
  194. /*
  195. {
  196. Class1 temp;
  197. for (int i = 0; i < massive.Length; i++)
  198. for (int j = 0; j < massive.Length - 1; j++)
  199. if (massive[j].get_area() > massive[j + 1].get_area())
  200. {
  201. temp = massive[j];
  202. massive[j] = massive[j + 1];
  203. massive[j + 1] = temp;
  204. }
  205. }
  206. */
  207. for (int i = 0; i < Console.BufferWidth; i++) Console.Write("=");
  208. Console.WriteLine("|{0, 5} |{1, 16} |{2, 16} |{3, 16} |", "Номер", "Наименование", "Цвет", "Площадь");
  209. for (int i = 0; i < Console.BufferWidth; i++) Console.Write("=");
  210. for (int i = 0; i < massive.Length; i++)
  211. {
  212. for (int j = 0; j < Console.BufferWidth; j++) Console.Write("-");
  213. switch (massive[i].side_length.Length)
  214. {
  215. case 3:
  216. {
  217. Console.Write("|{0, 5} |{1, 16} |", (i + 1).ToString(), "Треугольник");
  218. Console.ForegroundColor = (ConsoleColor)Enum.Parse(typeof(ConsoleColor), massive[i].figure_color.ToString());
  219. Console.Write("{0, 16}", massive[i].figure_color.ToString());
  220. Console.ForegroundColor = ConsoleColor.White;
  221. Console.WriteLine("|{0, 16} |", massive[i].get_area());
  222. } break;
  223. default:
  224. {
  225. Console.Write("|{0, 5} |{1, 16} |", (i + 1).ToString(), "Прямоугольник");
  226. Console.ForegroundColor = (ConsoleColor)Enum.Parse(typeof(ConsoleColor), massive[i].figure_color.ToString());
  227. Console.Write("{0, 16}", massive[i].figure_color.ToString());
  228. Console.ForegroundColor = ConsoleColor.White;
  229. Console.WriteLine("|{0, 16} |", massive[i].get_area());
  230. } break;
  231. }
  232. for (int j = 0; j < Console.BufferWidth; j++) Console.Write("-");
  233. }
  234. for (int i = 0; i < Console.BufferWidth; i++) Console.Write("=");
  235. Console.ReadKey();
  236. Int32 FinalResult = new Int32();
  237. for (int i = 0; i < massive.Length; i++)
  238. {
  239. if ((massive[i].figure_color == ConsoleColor.Red.ToString()) && (massive[i].side_length.Length == 4))
  240. FinalResult += Convert.ToInt32(massive[i].get_area());
  241. }
  242. Console.WriteLine("Итоговый результат = {0}", FinalResult.ToString());
  243. Console.ReadKey();
  244. }
  245. }
  246. }
Конкретно проблема заключается здесь:
Листинг программы
  1. for (int i = 0; i < size; i++)
  2. {
  3. switch (random.Next(1, 2))
  4. {
  5. case 1:
  6. {
  7. //Как бы действие
  8. } break;
  9. case 2:
  10. {
  11. //Как бы действие
  12. } break;
  13. }
  14. }
Скриншот работы программы:
http://www.cyberforum.ru/attachment....1&d=1391548873

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

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

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


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

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

15   голосов , оценка 3.867 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы