日期:2014-05-20  浏览次数:20619 次

静态变量问题求解
那个帖子没表达好,开个贴重问
大意就是
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+" ");
        }
    }
}