如果作为参数传递给方法,此数组中的值如何在方法的运行中更改

时间:2016-06-06 07:08:08

标签: java arrays

我是java的新手。我将For Ex N=6 Ans=20 定义为global array 在代码的中间,这个private int dataRightTemp[]=new int [4];作为参数传递给一个方法(下面我附上了代码)。在这个新方法中,先前array的值global array正在从使用方法dataRightTemp中传递的数组的计算中更改。计算完成后,新值设置为parameters,方法的dataRightTemparray的值如何更改,任何人都可以帮我解决这个问题。提前谢谢。

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();
  }
  }

3 个答案:

答案 0 :(得分:2)

  

当计算完成,并且新值设置为dataRightTemp时,方法参数中的阵列值如何变化,任何人都可以帮我解决这个问题。

您有两个对同一个数组的引用。这些参考文献是&#39; dataRightTemp&#39; &#39; rightArray&#39;

因此,数组中的任何更改都将反映在两个引用中,而不管它是否是类中的全局引用或方法中的本地引用。

答案 1 :(得分:0)

当您致电roundingRest(dataLeft,dataRightTemp); rightArraydataRightTemp。因此,当您在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();

}