Java - 在类方法中定义方法/函数/子例程

时间:2011-12-29 23:35:45

标签: java methods subroutine

所以基本上问题是我有一段代码需要通过java方法中的非常小的变化重复使用。

此部分代码还需要访问仅在类方法中定义的变量。

我进行了搜索,但发现无法在方法中添加子例程。我想添加一个本地类,但似乎你不能使用静态方法,这是我真正需要的。

如果它有帮助,我的目标是初始化一个游戏板,基本上包括:

GameSquare[][] board = new GameSquare[15][15];

并为每次通话:

board[a][b] = new GameSquare(params);

应该有相应的电话:

board[b][a] = new GameSquare(params);
board[15-a][15-b] = new GameSquare(params);
board[15-b][15-a] = new GameSquare(params);

即任何特殊方块都需要镜像其他四个角落。

我希望将所有这些包含在一个方法中。如果有方法在方法中有方法,我可以:

method( int a, int b, otherparams passed to GameSquare constructor){
  //initialise those 4 squares.
}

但是,到目前为止,我还没有找到这样做的方法。

干杯。

4 个答案:

答案 0 :(得分:1)

由于它是一个数组,如何将数组作为参数传递给方法呢?除了原语(intfloat等)之外,Java中的参数通过引用传递,因此您仍在修改相同的数组。

method(GameSquare[][] board, int a, int b, otherparams passed to GameSquare constructor){
    board[a][b] = new GameSquare(params)
    board[b][a] = new GameSquare(params)
    board[15-a][15-b] = new GameSquare(params)
    board[15-b][15-a] = new GameSquare(params)
}

使用它:

GameSquare[][] board = new GameSquare[15][15];
method(board,a,b,params);

答案 1 :(得分:1)

在我看来,你需要一个包含GameSquares数组的新类GameBoard。它会有一个方法

setSquare(int a,int b,GameSquare gs)

了解镜像。

答案 2 :(得分:0)

不,我们不能用Java,有时候很烦人。

你可以像凯文所示,在外面宣布这个方法。这不是那么糟糕。

本地课也很好。该方法不必是静态的。

final GameSquare[][] board = ...

class Util
    void method(...)
        board[][]...

Util util = new Util();

util.method(...);

这有点冗长。

答案 3 :(得分:0)

这就是你想要特殊方块的方式吗?

class GameSquare {
    GameSquare(int x) {
        this.x = x;
    }
    public String toString() {
        return "" + x;
    }
    int x;
}
public class Main {
    void print() {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++)
                if (board[i][j] == null) System.out.print("oops");
                else if (board[i][j].x < 10) System.out.print(board[i][j] + "  ");
                else
                    System.out.print(board[i][j] + " ");
            System.out.println();
        }
    }
    void makeSpecial(int i,int j,int k) {
        board[i][j] = new GameSquare(k);
        board[j][i] = new GameSquare(k);
        board[n - 1 - i][n - 1 - j] = new GameSquare(k);
        board[n - 1 - j][n - 1 - i] = new GameSquare(k);
        board[i][n - 1 - j] = new GameSquare(k);
        board[n - 1 - j][i] = new GameSquare(k);
        board[n - 1 - i][j] = new GameSquare(k);
        board[j][n - 1 - i] = new GameSquare(k);
    }
    void init() {
        int k = 0;
        for (int i = 0; i < n; i++)
            for (int j = 0; j < n; j++, k++)
                board[i][j]=new GameSquare(0);
        makeSpecial(2,3,1);
        makeSpecial(5,6,2);
    }
    public static void main(String[] args) {
        Main main = new Main();
        main.init();
        main.print();
    }
    final int n = 7;
    GameSquare[][] board = new GameSquare[n][n];
}