2017-02-26 4 views
1

Also verwende ich Einheit und ich habe diese Zeichenfolge, die den aktuellen Zustand eines Tic-Tac-Toe-Board enthält. Es sieht so aus:Ersetze ein einzelnes Zeichen in einem String

XOX 
ONX 
OXX 

"N" ist ein neutraler Raum.

Die Sache ist, ich möchte eines dieser "N" entweder mit einem "X" oder einem "O" ersetzen. mit ich versucht:

board[n] = "X"; 

aber ich bekomme

„Eigenschaft oder Indexer kann nicht zugeordnet werden, ist es nur lesen“

So einen Weg ich versuche Figur ändere eins von diesen "N". Hier ist mein Code

if (manager.turn == 1 && !isUsed) 
{ 
    xSprite.enabled = true; 
    manager.board[int.Parse(gameObject.name)-1] = 'X'; 
    manager.GameEndingDraw(); 
    isUsed = true; 
    manager.turn = 2; 
} 
else if (manager.turn == 2 && !isUsed) 
{ 
    oSprite.enabled = true; 
    manager.board[int.Parse(gameObject.name)-1] = 'O'; 
    manager.GameEndingDraw(); 
    isUsed = true; 
    manager.turn = 1; 
} 
+2

'string' immuteable ist. Sie müßten 'board = board.Remove (n, 1) .Insert (n," X ");' tun, aber Sie sollten wirklich eine andere Datenstruktur wie ein 2D-char-Array betrachten. – juharr

Antwort

4

Ein Tic-Tac-Toe Board ist kein String, es ist ein 3 × 3-Raster von Markern wie chars . Sie sollten es als ein Array darstellen, keinen String:

var board = new char[3, 3]; 
for (int i = 0; i < board.GetLength(0); i++) 
    for (int j = 0; j < board.GetLength(1); j++) 
     board[i, j] = 'N'; 

Dann können Sie jede Markierung durch seine Koordinaten festgelegt:

board[0, 0] = 'X'; 
1

hier 4 Methoden können Sie verwenden:

ToCharArray

var array = board.ToCharArray(); 
array[indexOfNew] = newChar; 
board = new string(array); 

String

var sb = new StringBuilder(board); 
sb[indexOfNew] = newChar; 
board = sb.ToString(); 

Str ing.Remove und String.Insert

board = board.Remove(indexOfNew, 1) 
    .Insert(indexOfNew, newChar.ToString()); 

SubString und String Interpolation

board = $"{board.Substring(0, indexOfNew)}{newChar}{board.Substring(indexOfNew+1, board.Length-indexOfNew-1)}"; 

Angenommen board die ursprüngliche Zeichenfolge enthält, enthält newChar den neu platzierten "Stück" und indexOfNew enthält den Index in der Zeichenfolge, die Sie ersetzen müssen.

Und man könnte natürlich wickeln Sie die Option, die Sie in eine Erweiterungsmethode wählen:

public static string ReplaceAt(this string inputString, int newCharIndex, char newChar) 
{ 
    var newString = // Insert your choice of replacement from above here 
    return newString; 
} 
Verwandte Themen