2017-08-30 79 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类并将其扩展以创建每件作品的可能性会很有帮助。