public LetterTracker() { orderedLetters = new OrderedLetter[LETTER_COUNT]; for (var i = 0; i < LETTER_COUNT; ++i) { orderedLetters[i] = new OrderedLetter(); } }
public static List <int> PrintFirstNRE(StreamReader sr) { if (sr == null) { throw new ArgumentNullException("Parameter StreamReader sr is null."); } //// Debug to see what we got in that thar stream //while (sr.EndOfStream == false) //{ // Console.WriteLine(Convert.ToChar(sr.Read())); //} var letterTracker = new OrderedLetter[LETTER_COUNT]; for (var i = 0; i < LETTER_COUNT; ++i) { letterTracker[i] = new OrderedLetter(); } //var letters = new LetterTracker(); // "cannot assign to letter because it is a foreach iteration variable" //foreach (var letter in letters) //{ // letter = new orderedletter(); //} var firstNREList = new List <int>(); // No. If stream is empty this will fail: //var currFirstNRE = sr.Read(); // Either use a single Read() inside the end check of the while loop // Or add protection out here // (Fixed with the former) //ValidateLetter(currFirstNRE); //letters.SeeLetter(currFirstNRE); //firstNREList.Add(currFirstNRE); while (sr.EndOfStream == false) { var currLetter = sr.Read(); Console.WriteLine($"Reading '{Convert.ToChar(currLetter)}' from stream."); ValidateLetter(currLetter); letterTracker[currLetter - 'a'].LogAsRead(); var currFirstNRE = FindCurrentFirstNRE(letterTracker); firstNREList.Add(currFirstNRE); if (currFirstNRE == NO_NRE) { Console.WriteLine($"No non-repeating letters. {NO_NRE}"); } else { Console.WriteLine($"First non-repeating letter so far is: {Convert.ToChar(currFirstNRE)}"); } } // Fixup for if there were no letters in the stream at all if (firstNREList.Count == 0) { Console.WriteLine( $"No letters found in stream.\n" + $"No non-repeating letters. {NO_NRE}"); firstNREList.Add(NO_NRE); } return(firstNREList); }