在java中将字符串坐标转换为数组上的位置
Hi希望在我正在构建的tic-tac-toe游戏中读取值背后的逻辑方面得到一些帮助。您只需在开始时设置一个默认值,如:在java中将字符串坐标转换为数组上的位置,java,Java,Hi希望在我正在构建的tic-tac-toe游戏中读取值背后的逻辑方面得到一些帮助。您只需在开始时设置一个默认值,如: int row = 0, column; 或者写另一个whileLoop来防止这种情况 除此之外,还有一种更简单的方法来分配行(在我的计算机上,当您将字符串与字符进行比较时要小心,因为它不起作用): 1.比较答案的第一个字母(或.equals(“a”)): 2.做一个切换案例,因为你总是比较相同的东西: switch(string.charAt(0)){ c
int row = 0, column;
或者写另一个whileLoop来防止这种情况
除此之外,还有一种更简单的方法来分配
行
(在我的计算机上,当您将字符串
与字符
进行比较时要小心,因为它不起作用):
1.比较答案的第一个字母(或.equals(“a”)
):
2.做一个切换案例,因为你总是比较相同的东西:
switch(string.charAt(0)){
case 'a':
row=0;
break;
case 'b':
row=1;
break;
case 'c':
row=2;
break;
}
3.使用其ASCII值:
row = string.charAt(0)-97;
因此:
而且要小心,因为如果
inBounds()
实现得很好:如果坐标正确,它将返回true,但是如果条件为true,while循环将继续,并且您需要它在坐标不正确时循环,因此您需要使用!inBounds()
它告诉您,行
可能未初始化,因为如果所有如果
的计算结果为false
,行
将未初始化。如果您告诉用户在a
和c
之间插入一个字母,您将无法确保用户不会输入d
。在这种情况下,行
将保持未初始化状态。我明白了,有没有简单的方法解决这个问题?我是否应该在它们的警告错误字母中添加else语句?是的,您应该这样做,您可以使用while循环不断询问用户正确的输入字符串。equals('a')
将永远不会为真,参数类型必须为字符串。重写所有这些条件:string.equals(“a”)
非常感谢,是的,我还认为减ASCI值是最干净的方法。我有点困惑的是Charat(0)-程序如何知道0值是什么?Charat()方法将使用字符串作为数组,因此它有许多索引,给定索引处的每个元素都是一个字符。因此,“0”将是第一个索引->第一个字符您还有char[]tab=string.toCharArray(),这里是创建数组的方法,因此.charAt()是.toCharArray()的快捷方式,然后访问itI。我看到,代码不起作用,我认为没有存储值。我需要将它从字符串转换为int吗?在去掉97值之后否,因为当你在字符上使用数学函数时,它直接使用它的ascii值,所以它可以在一个int中写入System.out.println(“->”+row”;在while循环之后进行检查,问题到底出在哪里?row=string.charAt(0)-97;
也可以重新写入row=string.charAt(0)-“a”
为了清晰起见:)
row = string.charAt(0)-97;
public void askPlayer(char player) {
Scanner instruction = new Scanner(System.in);
int row, column;
do {
System.out.printf("Player %s please enter an instruction (a-c): ", player);
String string = instruction.next();
row = string.charAt(0)-97;
System.out.printf("Player %s please enter a column (1-3): ", player);
column = instruction.nextInt();
} while (!inBounds(row, column));
makeMove(player, row, column - 1);
} // end of ask player method