gpt4 book ai didi

java - 变量在传递给函数时会更改其值

转载 作者:行者123 更新时间:2023-12-02 12:06:40 25 4
gpt4 key购买 nike

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

    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改变其值的原因。

最佳答案

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

关于java - 变量在传递给函数时会更改其值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46867762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com