我从这里创建一个tic tac toe程序:
http://programmingbydoing.com/a/tic-tac-toe.html
我无法找到如何从方法返回数组索引。我希望用户输入2个整数,(行,列)并返回该索引并且具有char' O'或' X'替换空白对应的索引。
我对java有点新意,并且我试图尽可能快速有效地学习它,以便赶上我的课程。
import java.util.Scanner;
public class ticTacToe{
public static Scanner in = new Scanner(System.in);
private static int r, c;
private static char[][] board = new char[3][3];
//create a 3x3 array of characters
public static void main( String[] args ) {
Scanner in = new Scanner(System.in);
displayBoard();
do{
// user inputs two numbers as indexes
//turn index into "o"
//prompt other user to make move, repeat with "x"
}while(checkLoser());
}
public static void displayBoard() {
System.out.println(" 0 " + board[0][0] + "|" + board[0][1] + "|" + board[0][2]);
System.out.println(" --+-+--");
System.out.println(" 1 " + board[1][0] + "|" + board[1][1] + "|" + board[1][2]);
System.out.println(" --+-+--");
System.out.println(" 2 " + board[2][0] + "|" + board[2][1] + "|" + board[2][2]);
System.out.println(" 0 1 2 ");
}
public static int[] getArrayIndex(){
System.out.println("'O'. Choose your Row...(row, column)");
int r = in.nextInt();
int c = in.nextInt();
return new int[] {r,c};
}
public static void userMove(int[][] ){
board[r][c] = 'O';
}
public static boolean checkLoser(){
if (board[0][0] == board[0][1]){
if (board [0][1] == board[0][2]){
return false;
}
}
else if (board[1][0] == board[1][1]){
if (board [1][1] == board[1][2]){
return false;
}
}
else if (board[2][0] == board[2][1]){
if (board [2][1] == board[2][2]){
return false;
}
}
else if (board[0][0] == board[1][0]){
if (board [1][0] == board[2][0]){
return false;
}
}
else if (board[0][1] == board[1][1]){
if (board [1][1] == board[1][2]){
return false;
}
}
else if (board[0][2] == board[1][2]){
if (board [1][2] == board[2][2]){
return false;
}
}
else if (board[0][0] == board[1][1]){
if (board [1][1] == board[2][2]){
return false;
}
}
else if (board[0][2] == board[1][1]){
if (board [1][1] == board[2][0]){
return true;
}
}else{
return false;
}
}
}
答案 0 :(得分:3)
Java方法是定义一个用于保存行和列索引的类。
final class BoardIndex {
final int row;
final int col;
BoradIndex(final int r, final int c) {
this.row = r;
this.col = c;
}
}
然后您可以从函数返回它。
BoardIndex getIt() {
return new BoradIndex(1, 2);
}
它有点打字,但许多Java人更喜欢这种明确的类型而不是使用整数数组。
答案 1 :(得分:1)
好吧,回答你的问题,因为它是一个二维数组,你显然需要返回两个索引(正如你可能想到的那样)。因为一个函数只能返回一个Object,正如你给出的函数所做的那样:
public static int[] getArrayIndex(){
System.out.println("'O'. Choose your Row...(row, column)");
int r = in.nextInt();
int c = in.nextInt();
return new int[] {r,c};
}
你返回了一个包含所需索引的双元素数组。这是你可以实现它的一种方式。其他形式包括创建一个带有两个int元素的Object并使用它来代替或者以某种方式将两个变量存储在同一个int中(例如,将它们保持为一位数)。
无论如何,你回归这些指数的方式还不错。您如何使用这些信息取决于您。我想你必须将它存储在像int[] temp=getArrayIndex();
这样的临时int数组中,然后访问每个元素以获得相应的索引。
但是,您的代码还有其他错误,例如忘记在此函数中为参数添加名称(或者不使用此类参数的事实):
public static void userMove(int[][] ){
board[r][c] = 'O';
}
我建议你检查一下。也许你编译的程序给你一个错误,你认为这是因为new int[] {r,c}
的事情,但naaah,这是有效的。如果是这种情况,请检查其余部分,这是其他的事情。不过我会很乐意帮忙,所以请随意提问。 ^^