一个邪门的JAVA程序,望高手看一下

来源:百度知道 编辑:UC知道 时间:2024/05/14 10:11:07
/*下面是我的程序,如果保留1,程序能正常打印出24来(这道题是求数组中各个元素的积),
*但如果把1注释掉,放开2---9,怎么就打印出0了呢?难道2---9行的效果不是和1行的效果
*是一样的吗?极度困惑中………!望好人给我解答以下,谢谢谢谢谢谢!!!!!!!!!!!
*
*/
public class mmmm
{ int a[]={1,2,3,4}; //1
// int a[]=new int[4]; //2
// public mmmm() //3
// { //4
// for(int i=0;i<4;i++) //5
// { //6
// a[i]=i+1; //7
// } //8
// } //9
int count=a.length;
int l= f(count-1);
public static void main(String[] args)
{
mmmm cc=new mmmm();
System.out.print(cc.l);
}

public int f(int c)
{
if(c==0)
return a[c];
else
return f(--c)*a[c+1];
}
}
对YO_123的回答,我不是很理解,他说“所以放开2---9,在调用f(count-1); a[]的

是先初始化域,然后再调用构造函数的
所以放开2---9,在调用f(count-1); a[]的所有元素都是0
你把l= f(count-1);
放到构造函数里面就都一样了

放开2---9时候:
我的意思是你new了一个对象,在这个对象的生成过程中
先初始化:
int a[]=new int[4];
int count=a.length;
int l= f(count-1);
然后再调用
mmmm()
因为在初始化l德时候调用函数f()用到了a[],此时a[]还没有
被赋值,四个元素都是0
所以计算结果l=0
然后再电用mmmm() a[]被赋值
所以你如果把你把l= f(count-1);
放到构造函数mmmm() 里面就都一样了
否则因为a[]还没有被赋值,计算机结果是0

说这么多,至少也给点分了吧;:)