如何从方法返回二维数组索引?

时间:2014-12-01 20:19:30

标签: java arrays methods

我从这里创建一个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;
            }

    }

}

2 个答案:

答案 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,这是有效的。如果是这种情况,请检查其余部分,这是其他的事情。不过我会很乐意帮忙,所以请随意提问。 ^^