Как сгенерировать случайное число только один раз в C#
Прежде всего, я хотел бы поблагодарить Code Project за помощь в моем стремлении изучить C#. Я начал учиться этой программе как хобби и выбрал c#, так как слышал, что его довольно легко выучить человеку без какого-либо опыта программирования. Однако я понял, что это все еще слишком тяжело для меня. Но код проекта всегда помогала мне выяснить, что происходит. В любом случае...
Поэтому я пытался написать консольное приложение на C# , которое отображает анимацию на консоли. До сих пор я могу написать около 95% кода, и он работает, но я все еще не могу понять, как сгенерировать случайное число из списка чисел только один раз. Я включил код, который я написал для всех, чтобы просмотреть. Прямо сейчас я должен использовать избыточный метод, чтобы убедиться, что все символы напечатаны на консоли. Что отнимает уйму времени и, наверное, памяти тоже. Ниже приведен мой код. Пожалуйста, извините меня, если код кажется трудным для чтения, так как прошло всего около 1,5 месяцев с тех пор, как я начал работать с c#.
Если кто-нибудь может подсказать мне, что я могу сделать, чтобы удалить избыточный номер итерации из моего кода, то я думаю, что он будет завершен.
<pre> using System; using System.IO; using System.Threading; namespace BeautifulNameAnimation { class Program { static void Main(string[] args) { Console.WriteLine("Please play in maximised window mode. PRESS ENTER after maximising your window"); Console.ReadKey(); Console.WriteLine("Please enter the complete path of your text file including the text file name with extension: "); Console.ForegroundColor = ConsoleColor.Magenta; Console.Write(">>> "); Console.ResetColor(); string path = Console.ReadLine(); Console.WriteLine("Provide animation delay number. Bigger the number Slower the animation."); Console.ForegroundColor = ConsoleColor.Magenta; Console.Write(">>> "); Console.ResetColor(); int animDelay = int.Parse(Console.ReadLine()); Console.WriteLine("Redundancy Number: (This number decides the iteration for animation) -- Start with 1000 and then gradually increase it. "); Console.ForegroundColor = ConsoleColor.Magenta; Console.Write(">>> "); Console.ResetColor(); int redundencyCounter = int.Parse(Console.ReadLine()); Console.Clear(); //// Program Execution Stage -1 int[] Method1Output = ReturnColsAndRows(path); //// Program Execution Stage -2 char[,] Method2Output = ExtractAllChars(Method1Output, path); //// Program Execution Stage -3 (Final OutPut) PrintTextFile(Method2Output, animDelay, redundencyCounter); Console.ResetColor(); Console.ReadKey(); } //Method No. 1 #region Method for calculating Rows and Colums in the Source Text File. public static int[] ReturnColsAndRows(string path) { StreamReader reader = new StreamReader(path); int cols = reader.ReadLine().Length; int rows = 1; string line = reader.ReadLine(); while (line != null) { rows++; line = reader.ReadLine(); } reader.Close(); int[] rowsNcols = new int[2] { rows, cols }; //To be used in Method No. 2 for Char[,] return rowsNcols; } #endregion //Method No. 2 #region Method for extracting individual characters from Source Text File. public static char[,] ExtractAllChars(int[] Method1Output, string path) { StreamReader reader = new StreamReader(path); string line = reader.ReadLine(); char[,] charsInSourceFile = new char[Method1Output[0], Method1Output[1]]; for (int row = 0; row < charsInSourceFile.GetLength(0); row++) { for (int col = 0; col < charsInSourceFile.GetLength(1); col++) { charsInSourceFile[row, col] = line[col]; } line = reader.ReadLine(); } reader.Close(); return charsInSourceFile; } #endregion //Method No. 3 #region Method for printing extracted chars in a random fashion public static void PrintTextFile(char[,] charsInSourceFile, int animDelay, int redundencyCounter) { int counter = 0; Random rand = new Random(); while (true) { int row = rand.Next(charsInSourceFile.GetLength(0)); int col = rand.Next(charsInSourceFile.GetLength(1)); Console.SetCursorPosition(col, row); Console.ForegroundColor = ConsoleColor.Yellow; Console.Write(charsInSourceFile[row, col]); counter++; Thread.Sleep(animDelay); if (counter == redundencyCounter) // This is the problem { Console.SetCursorPosition(0, charsInSourceFile.GetLength(0) + 2); break; } } } #endregion } }
Что я уже пробовал:
Я попытался погуглить свой вопрос, но не смог найти никакого решения
BillWoodruff
Ваш код предполагает, что все строки в файле имеют одинаковую длину: это то, что вы действительно хотите ?
Если все линии имеют одинаковую длину и вы используете один и тот же файл каждый раз, то вы можете сгенерировать случайные точки и символы один раз и перетасовать их, если хотите, чтобы анимация каждый раз была разной.