为什么我的up函数会在Java中改变输入
我编写了一个函数来更改输入矩阵,并用java返回更改后的矩阵。 但是当我调用这个函数后想要使用输入矩阵时,我看到我的输入矩阵已经改变了。 我的上传功能:为什么我的up函数会在Java中改变输入,java,Java,我编写了一个函数来更改输入矩阵,并用java返回更改后的矩阵。 但是当我调用这个函数后想要使用输入矩阵时,我看到我的输入矩阵已经改变了。 我的上传功能: char[][] up(char[][] state, int[] empty){ int ie = empty[0]; int je = empty[1]; if(tools.checkMoves(state,1,ie,je)){ state[ie][je] = state[ie-1][je];
char[][] up(char[][] state, int[] empty){
int ie = empty[0];
int je = empty[1];
if(tools.checkMoves(state,1,ie,je)){
state[ie][je] = state[ie-1][je];
state[ie-1][je] = '0';
}else{
System.out.println("Move not allowed");
}
return state;
}
打印矩阵,然后调用函数并再次打印矩阵
System.out.println(gameGenerator.printGame(nextState));
System.out.println(gameGenerator.printGame(moves.up(nextState,tools.getEmpty(nextState))));
System.out.println(gameGenerator.printGame(nextState));
答案是:
1.打印输入矩阵
-------------
| 1 | 2 | 3 |
| 5 | 7 | 6 |
| 4 | | 8 |
-------------
2.打印函数返回的矩阵
-------------
| 1 | 2 | 3 |
| 5 | | 6 |
| 4 | 7 | 8 |
-------------
3.调用函数后打印输入矩阵,并更改
-------------
| 1 | 2 | 3 |
| 5 | | 6 |
| 4 | 7 | 8 |
-------------
请帮忙!感谢大家您正在修改这两行中的输入矩阵:
state[ie][je] = state[ie-1][je];
state[ie-1][je] = '0';
Java是一种面向对象的语言。将对象传递给方法时,传递其引用。将复制引用,但不会复制对象本身。当您在方法内部修改对象时,它仍然在方法之后修改,这是正常的,因为它是相同的对象
如果不希望方法产生任何副作用,则必须在方法开头创建矩阵的副本并修改副本
补充说明:
您可能想知道,为什么当输入是基元类型时,方法外部的值仍然相同,如下所示:
public void modify(int i){
i = 5;
}
这是因为Java是按值传递的,这意味着在调用方法时复制i的值,因此只修改副本。如上所述,对象引用也通过值传递,这意味着引用被复制。为了粗略地解释它,您将指针的值复制到对象
如果您想要更详细的解释,您可以阅读以下内容:是的,我在发布此问题后做了此操作。所以这是正确的方法。多谢了,但有一件事,当使用整数返回类型的函数时,这种情况不会发生。例如,函数给出一个数字,然后将其乘以-1并返回。我编辑了我的答案,解释了原语的区别