2017-08-30 83 views
-3

字符串所以我們可以說,我給一個棋子是在位置「C4」,所以它在第3列和第4排。如何去閱讀這個「c4」字符串,然後在棋盤上標記一塊棋子在那裏。 我一直在思考一個for循環,對字符讀取,而另一個用於數字閱讀,但不知道如何以紀念這一塊是在像C4的位置。 任何想法或想法將我推向正確的方向?閱讀和存儲在Java

+2

分裂的''「C4」''到它的行/列的組件應該不難。 「在板上標記」是什麼意思? – f1sh

+1

你應該看看[問]和[幫助/關於話題] – pvg

+1

什麼是你目前的實現?什麼代表董事會和什麼代表你在哪裏標記它在那裏?有人願意幫助你,我敢肯定,但還沒有真正足夠讓我離開這裏 – Rafa

回答

0

這真的取決於你是什麼,在這種情況下都不能保證。你知道一個事實,第一個字符總是一個字母嗎?你的人數限制是多少?

如果你保證第一個總是一個角色,就像在一個棋盤(8x8網格)中一樣,那麼你可以做一個簡單的myStr.charAt(0)來獲得該角色,然後替換那個角色,將其餘的轉換爲myStr.replace(oldChar, '')並用Integer.parseInt()解析。

如果您的數據並不能完全保證要複雜得多,你會想打破你的字符串分成幾部分,通過你打破它下來什麼來解析,並且做對數據進行處理。例如,如果我得到了字符串"hh88",我將首先找到數字的起始位置,將這兩部分分開,然後對數據進行處理。如果您不能保證相同的順序,即相同的想法適用,即"8c"是有效的字符串條目,這裏的區別是您需要確定每個組件的位置。

+0

這是保證,一個字母永遠是第一個 –

+0

所以myStr,charAt(0)會得到第一個字符。 Integer.parseInt()會做什麼? –

+0

然後上面應該工作得很好,或多或少地識別字母停止和數字結束的地方,並以這種方式打破你的字符串。 'substring','replace'和'split'(如果在輸入的字符串中有一個分隔符)都可以正常工作。 – swiftzor

2

你可能會想這些值與二維數組存儲,如下所示:

bool[][] board = new bool[8][8];

至於閱讀的字符串有一個很多方法,你可以去了解它。我會使用charAt來拉出單個字符,然後通過switch語句將第一個字符放到數字值中。

String input = "c4" 
int row = Character.getNumericValue(input.charAt(1)); 
char columnChar = input.charAt(0); 
int column; 
switch (Character.toLowerCase(input.charAt(1)) { 
    case 'a': 
     column = 1; 
    case 'b': 
     column = 2; 
    // etc... 
} 
board[column - 1][row - 1] = true; // Fill the board, subtracting one to account for arrays indexing from zero 

這裏我用了一個布爾數組來跟蹤,當然你需要一些更復雜的東西來跟蹤不同的部分。創建一個ChessPiece類並將其擴展以創建每件作品的可能性會很有幫助。