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

Java-在类方法中定义方法/函数/子例程,java,methods,subroutine,Java,Methods,Subroutine,所以基本上问题是,我有一段代码需要在java方法中重复使用,但有一些细微的变化 这段代码还需要访问仅在类方法中定义的变量 我做了一次搜索,但没有找到在方法中添加子例程的方法。我曾考虑添加一个本地类,但似乎不能将静态方法用于这些类,这正是我真正需要的 如果有帮助的话,我的目标是初始化一个游戏板,它基本上包括: GameSquare[][] board = new GameSquare[15][15]; 每次通话: board[a][b] = new GameSquare(params); 应相

所以基本上问题是,我有一段代码需要在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.
}
但是,到目前为止,我还没有找到这样的方法


干杯。

既然它是一个数组,那么把数组作为参数传递给方法怎么样?除了原语(
int
float
等)之外,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);

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

如Kevin所示,您可以在外部声明该方法。没那么糟

本地班也可以。该方法不必是静态的

final GameSquare[][] board = ...

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

Util util = new Util();

util.method(...);

这有点冗长。

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

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];
}
classgamesquare{
GameSquare(整数x){
这个.x=x;
}
公共字符串toString(){
返回“+x”;
}
int x;
}
公共班机{
作废打印(){
对于(int i=0;i
在我看来,您需要一个新类GameBoard,它包含GameSquares数组。它会有一个方法

固定方格(内部a、内部b、游戏方格gs)


它知道镜像。

如果您提供一些伪代码,说明您正在尝试执行的操作,您可能会得到更好的帮助。任何可以由本地函数完成的事情都可能由匿名类完成,尽管它不会像其他语言那样漂亮。现在我不清楚为什么你需要一个本地方法,或者它将要做什么。不确定问题是什么。你不能在“GameBoard”类上编写一个setter方法(比如
setCorners
),它接受坐标对和参数并设置所有角点。你到底想实现什么样的变化?嘿,这很方便!如果有这样的事情,它仍然比我可能会说的更详细一些,但这似乎是最接近的了。虽然这会起作用,但它不是很OOP。什么类有这个方法?我最初是把这个方法放在正方形里,尽管有一块板可能是有意义的。相反,这样做了。此外,我意识到,如果一个方法声明了许多局部变量,事情可能会变得非常混乱=/。是的,如果你创建一个
GameBoard
类来保存
GameSquare
数组,可能会更好,就像用户949300建议的那样。嘿,雷,是的,这基本上就是我想要的,除了,每次我想在不同的地方初始化不同类型的正方形时,我不想在两个嵌套for循环之间有那么大的代码块。你需要这8条语句。让我把它变成一个函数。请参见编辑。你需要这种逻辑。是的,你说得很好。我只是想知道这是否可能,这就是让我思考java是否有这样一种机制的问题。