2016-09-21 2 views
-1

Ich kann die Array-Mitglieder nicht dauerhaft ersetzen. Wenn ich den Wert von String Clue ändere, zeigt die angezeigte Zeichenfolge nur den aktuellen Wert von clue an. Ich denke das Problem ist uns bei der Initialisierung von char []. Ich habe versucht, sie in andere Teile des Codes zu setzen, aber es erzeugt Fehler. Anfänger hier! Hoffe, du kannst mir helfen. Vielen Dank! :)Kann den Wert in einem Array nicht dauerhaft ersetzen

private void clues(String clue) 
    { 
     int idx = numb[wordOn]+4; 

     char[] GuessHide = Words[idx].ToUpper().ToCharArray(); 
     char[] GuessShow = Words[idx].ToUpper().ToCharArray(); 

      for (int a = 0; a < GuessHide.Length; a++) 
      { 
       if (GuessShow[a] != Convert.ToChar(clue.ToUpper())) 
        GuessHide[a] = '*'; 
       else 
        GuessHide[a] = Convert.ToChar(clue.ToUpper()); 
      } 
      Guess(string.Join("", GuessHide)); 
    } 
+5

Strings sind in C# unveränderlich. Verwenden Sie 'ref String clue', wenn Sie den Kontext von' clue' ändern wollen –

+0

Unveränderliche Zeichenfolgen lesen! ein Objekt, dessen Zustand nach der Erstellung nicht geändert werden kann. http://stackoverflow.com/questions/4274193/what-is-the-difference-between-a-mutable-and-immututable-string-in-c – Tushar

+0

Ich bin nicht sicher, was die "Rate" Funktion tut. führt Guess die Wortliste erneut aus? Wenn nicht, dann liegt Ihr Problem in der Unveränderlichkeit von Strings und Sie müssen es wieder in Words einfügen. Willkommen zu Stack-Überlauf :) –

Antwort

0

Herausgegeben - weil Sie GuessHide bei jedem Aufruf der Anrufe in Ihrem Code initialisieren und Sie speichern nicht seinen aktuellen Zustand Sie es im Grunde jedes Mal zurückgesetzt.

es
private static void clues(string clue, char[] GuessHide, char[] GuessShow) 
    { 
     for (int a = 0; a < GuessHide.Length; a++) 
     { 
      if (GuessShow[a] == Convert.ToChar(clue.ToUpper())) 
      { 
       GuessHide[a] = Convert.ToChar(clue.ToUpper()); 
      } 
     } 

     Console.WriteLine(string.Join("", GuessHide)); 
    } 

Aufruf wie folgt:

clues("p", GuessHide, GuessShow); 
clues("a", GuessHide, GuessShow); 

Initialise GuessShow und GuessHide wie dies in der Außen Code: Still, können Sie einige kleine Änderungen im Code wie diese machen

char[] GuessHide = new string('*', Words[idx].Length).ToCharArray(); 
char[] GuessShow = Words[idx].ToUpper().ToCharArray(); 
+0

Ja! So sieht meine Ausgabe aus. Zum Beispiel ist das Wort maskiert "APPEND". Wenn ich Hinweise ("P") rufe, ist die Ausgabe "* PP ***". Aber wenn ich es nochmal mit Wert "A" anrufe, ist der Ausgang "A *****". Ich möchte, dass "APP ***" angezeigt wird. – KuysChan

+0

@KuysChan 'APP ***' weil * P * vorher als Hinweis verwendet? –

+0

@OrkhanAlikhanov Ja. Gibt es etwas, das ich in meinem Code hinzufügen oder bearbeiten sollte? – KuysChan

0
public class Program 
{ 

    static string[] Words; 
    static string[] HiddenWords; 
    public static void Main() 
    { 
     Words = new string[] { "Apple", "Banana" }; 
     HiddenWords = new string[Words.Length]; 

     for (int i = 0; i < Words.Length; i++) 
     { 
      HiddenWords[i] = new string('*', Words[i].Length); 
     } 

     Guess('P', 0); 
     Guess('a', 0); 
     Guess('A', 1); 
     Guess('N', 1); 

     Console.ReadLine(); 
    } 


    private static void Guess(char clue, int idx) 
    { 
     string originalWord = Words[idx]; 
     string upperedWord = Words[idx].ToUpper(); 
     char[] foundSoFar = HiddenWords[idx].ToCharArray(); 
     clue = char.ToUpper(clue); 

     for (int i = 0; i < upperedWord.Length; i++) 
     { 
      if (upperedWord[i] == clue) 
      { 
       foundSoFar[i] = originalWord[i]; 
      } 
     } 

     HiddenWords[idx] = new string(foundSoFar); 

     Console.WriteLine(HiddenWords[idx]); 
    } 
} 
+0

Wenn Sie an einigen Punkten eine Erklärung benötigen, lassen Sie es mich wissen. –

+0

Werde dieses Sir versuchen! Vielen Dank! :) – KuysChan

Verwandte Themen