【问题标题】:Variable changes its value when passed to function [duplicate]变量在传递给函数时更改其值[重复]
【发布时间】:2017-10-21 20:29:31
【问题描述】:

我对 Java 很陌生,我不明白为什么变量“A”的值在作为参数传递给函数时会发生变化。我确实在函数中更改了它的值,但我认为这应该不是问题,因为函数会创建自己的参数“副本”。 我的项目由一个 main 函数和一个类组成,其中声明和实现了我的函数,如下所示。

    package NewtonRapson;

    public class Main {

        public static void main(String[] args) {


            division2 d2 = new division2();


            double A[] = {1, -2, 0, 7};
            double B[] = {0,1,1};
            double D[];
            double res = 0;

            d2.imprimir(A);
            res = d2.p_eval (A, 0.707);
            System.out.println();
            System.out.println( res);


            d2.p_div(A,B);

            d2.imprimir(A);
            res = d2.p_eval (A, 0.707);
            System.out.println();
            System.out.println( res);


        }

    }
`

    package NewtonRapson;
    public class division2 {
        int grado(double A[]){
        int grado = A.length -1;
        int cont = 0;

        for (int i = (A.length - 1); i>= 0; i--){
            if (A[i] != 0){break;}
            if (A[i] == 0){ cont++; }



        }
        return grado - cont;
        }

        double [] incrementar_grado(double A[], int k){
            double r[] = new double[A.length];
            for (int i = 0; i < A.length; i++){
                r[i] = 0;       
             }

            for (int i = 0; i < A.length; i++){
                if (i+k < A.length){
                    r[i+k] = A[i];
                }       
             }
        return r;
    }

        double [] p_div(double A[], double B[]){
            double cte;
            double C[] = new double[A.length];

            while (grado(A) >= grado(B)){

                for(int i = 0; i < C.length; i++){
                    C[i] = 0;

                }
                cte = A[grado(A)] / B[grado(B)];

                    for(int i = 0; i < C.length; i++){
                        if(i >= B.length) break;
                        C[i] = -cte*B[i];


                    }
                    for(int i = 0; i < C.length; i++){
                            if (grado (A) > grado (C)){
                            C = incrementar_grado( C, grado(A)-grado(C) );
                            }


                        A[i] = A[i]+C[i];
                    }
            }
            double res[] = new double[grado(A) + 1];
            for (int i =0; i< res.length; i++){
                res [i] = A[i];

            }
            return res;

        }

        double p_eval(double A[], double x) {
            double res = 0;
            for (int i = 0; i < A.length; i++) {
                res = res + A[i] * Math.pow(x, i);

            }

            return res;
        }

        void imprimir(double A[]){
            System.out.println();

            for(int i=0;i<A.length;i++){
                //System.out.println( dividir(polinomio,d)[i] );
                System.out.print(  A[i] );
                System.out.print(" | ");

            }
        }

        double [] p_derivar(double A[] ) {

            double d[] = new double [grado(A)];
            for(int i=0;i< d.length; i++){
                d[i]= A[i+1] * (i+1);
            }

        return d; 


        }

    }

我仍然不知道 A 改变其值的原因。

【问题讨论】:

  • 当您说A 改变值时,我假设您的意思是A 的内容,对吗?请参阅此问题的第一个答案 - stackoverflow.com/questions/12757841/… 以及我建议重复的问题。
  • @pstrjds 第二个答案很有帮助。

标签: java function arguments


【解决方案1】:

double A[] 是一个表(对象),而不是简单的类型变量。对于函数p_div(double A[], double B[]),您只传递了来自主函数的对表A 和B 的引用。当您更改 p_div 中的 A (A[i] = A[i]+C[i];) 时,您将更改 main 中的 A,因为它们(指向)相同。

【讨论】:

    猜你喜欢
    • 2023-03-06
    • 2016-03-28
    • 1970-01-01
    • 2014-05-08
    • 2017-12-07
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多