我是java的新手。我将For Ex N=6 Ans=20
定义为global array
在代码的中间,这个private int dataRightTemp[]=new int [4];
作为参数传递给一个方法(下面我附上了代码)。在这个新方法中,先前array
的值global array
正在从使用方法dataRightTemp
中传递的数组的计算中更改。计算完成后,新值设置为parameters
,方法的dataRightTemp
中array
的值如何更改,任何人都可以帮我解决这个问题。提前谢谢。
parameters
以下是收到的输出:
public class Demo{
private int key[]={1,0,1,0};
private int dataBlock[]={1,1,1,0,1,0,1,1};
private int dataLeft[]=new int [4]; // for left part the plain text
private int dataRight[]=new int [4]; //for right part of the plain text
private int dataLeftTemp[];
private int dataRightTemp[]=new int [4];
public void roundingStart(){
for(int i=0;i<4;i++){
// AND function
dataRightTemp[i]=key[i] & dataRight[i];
// XOR function
dataRightTemp[i]=dataRightTemp[i]^dataLeft[i];
}
dataLeft=dataRight.clone();
// printResults();
printFirst();
roundingRest(dataLeft,dataRightTemp);
}
public void roundingRest(int leftArray[],int rightArray[]){
System.out.println("Before");
for(int x: rightArray){
System.out.print(x);
}
System.out.println();
for(int i=0;i<4;i++){
// AND function
dataRightTemp[i]=key[i] & rightArray[i];
// XOR Function
dataRightTemp[i]=dataRightTemp[i]^leftArray[i];
}
System.out.println("right after");
for(int x: rightArray){
System.out.print(x);
}
System.out.println();
System.out.println();
}
public void main(String args[]){
roundingStart();
}
}
答案 0 :(得分:2)
当计算完成,并且新值设置为dataRightTemp时,方法参数中的阵列值如何变化,任何人都可以帮我解决这个问题。
您有两个对同一个数组的引用。这些参考文献是&#39; dataRightTemp&#39; 和&#39; rightArray&#39;
因此,数组中的任何更改都将反映在两个引用中,而不管它是否是类中的全局引用或方法中的本地引用。
答案 1 :(得分:0)
当您致电roundingRest(dataLeft,dataRightTemp);
rightArray
时dataRightTemp
。因此,当您在dataRightTemp
函数内更改roundingRest
时,也会更改rightArray
。数组参数起到链接的作用,而不是&#34;源数组的副本&#34;。
答案 2 :(得分:0)
我同意Azodiuos
的回答。您可以使用local array
存储rightArray
的值。试试此代码。如果我已正确理解您的要求,我认为这将满足您的需求
public void roundingRest(int leftArray[],int rightArray[]){
int rightTempTemp[]=new int[4];
// for Storing the rightArray[]
// for Copying the rightArray to rightTempTemp
for(int j=0;j<rightArray.length;j++){
rightTempTemp[j]=rightArray[j];
}
System.out.println("Before");
for(int x: rightTempTemp){
System.out.print(x);
}
System.out.println();
for(int i=0;i<4;i++){
// AND function
dataRightTemp[i]=key[i] & rightTempTemp[i];
// XOR Function
dataRightTemp[i]=dataRightTemp[i]^leftArray[i];
}
System.out.println("right after");
for(int x: rightTempTemp){
System.out.print(x);
}
System.out.println();
System.out.println();
}