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