那个帖子没表达好,开个贴重问
大意就是
public class Prj
{
static int b[]=new int[10];
static int c[]=new int[10];
public static void main(String args[])
{
Prj A=new Prj();
A.doit(1,b);
A.doit(2.c);
}
public void doit(int i,int arrays[])
{
//通过语句给b,c赋值
}
}
问题是这样赋的值只在doit中有效,主函数和其他方法中还是长度为10各值为0的数组,
求问 原因
和 如果要实现 在一个方法中赋值,其他方法中调用该怎么做
------解决方案--------------------------------------------------------
arrays=Arrays.copyOf(d, x);这句话有问题的,改成:for(int k=0;k<5;k++){arrays[k] = d[k];}就可以了。
方法调用传递的是引用的副本(方法里的arrays是b的副本),原来那句话只是改变引用指向的对象,arrays的副本指向的对象变了,但是b指向的对象并没有变,所以,主函数里面打印不出来结果。而用我写的那两句话,因为刚传进来数组的引用时,指向同一个数组b,改变b的副本指向的数组对象的值,就改变了b指向的值,所以在主函数里就能得到结果了。
------解决方案--------------------------------------------------------
- Java code
import java.util.*;public class Programme6{ static int b[]=new int[5]; static int c[]=new int[5]; public static void main(String args[]) { Programme6 A=new Programme6(); A.getFactor(80,b); System.out.println(); for(int i=0;i<b.length;i++) { System.out.print(b[i]+" \t"); } A.getFactor(90,c); System.out.println(); for(int i=0;i<c.length;i++) { System.out.print(c[i]+" \t"); } } public void getFactor(int i,int arrays[]) { int d[]=new int[100]; int p=i,j=2,x=0; while(j<=p) { if(p%j==0) { p=p/j; // d[x]=j; arrays[x]=j; //直接给数组元素赋值. x++; } else j++; } // arrays=Arrays.copyOf(d, x); //这句不要. for(int s:arrays) { System.out.print(s+" "); } }}