2016-09-21 44 views
-1

我無法永久替換數組成員。當我更改字符串線索的值時,正在顯示的字符串僅顯示線索的當前值。我認爲我們在初始化char []時遇到了問題。我試圖把它們放在代碼的其他部分,但它會產生錯誤。初學者在這裏!希望您能夠幫助我。謝謝! :)無法永久替換數組中的值

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

字符串在C#中是不可變的。如果你想改變'clue'的上下文,使用'ref String clue' –

+0

閱讀不可變的字符串!即在其創建之後其狀態不能被修改的對象。 http://stackoverflow.com/questions/4274193/what-is-the-difference-between-a-mutable-and-immutable-string-in-c – Tushar

+0

我不確定什麼「猜」功能。 Guess重新填充單詞列表嗎?如果不是,那麼你的問題在於字符串的不變性,你需要重新插入單詞。此外,歡迎堆棧溢出:) –

回答

0

編輯 - 因爲你在你的代碼調用每次調用initalize GuessHide,你不保存其當前狀態,你基本上重置每次它。不過,你可以在你的代碼像這樣的一些小的修改:

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

這樣稱呼它:

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

初始化GuessShow和GuessHide在外面這樣的代碼:

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

是的!這就是我的輸出結果。例如,被屏蔽的單詞是「APPEND」。當我稱呼線索(「P」)時,輸出爲「* PP ***」。但是當我再次用值「A」調用它時,輸出是「A *****」。我希望它顯示「APP ***」。 – KuysChan

+0

@KuysChan'APP ***'因爲* P *以前用作線索? –

+0

@OrkhanAlikhanov是的。有什麼我應該添加或編輯我的代碼? – 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

如果您需要某些解釋,請告訴我。 –

+0

請試試這位先生!謝謝! :) – KuysChan