当前位置: 代码迷 >> Java相关 >> 静态变量有关问题求解
  详细解决方案

静态变量有关问题求解

热度:4328   发布时间:2013-02-25 21:44:51.0
静态变量问题求解
那个帖子没表达好,开个贴重问
大意就是
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+" ");        }    }}
  相关解决方案