黑马程序员技术交流社区

标题: 为什么打出来都是0 [打印本页]

作者: 丁绍然    时间: 2014-5-25 09:14
标题: 为什么打出来都是0
class demo
{
public static void main(String[] args)
{
int [] arr=new int[100];
for(int x=0;x<100;)
{arr[x]=x;
x++;
System.out.println("arr["+x+"]="+arr[x]);
}
}
}class demo
{
public static void main(String[] args)
{
int [] arr=new int[100];
for(int x=0;x<100;)
{arr[x]=x;
x++;
System.out.println("arr["+x+"]="+arr[x]);
}
}
}
作者: 木华    时间: 2014-5-25 09:22
程序调整一下即可
class Demo
{
public static void main(String[] args)
{
int [] arr=new int[100];
for(int x=0;x<100;)
{arr[x]=x;

System.out.println("arr["+x+"]="+arr[x]);
x++;
}
}
}
作者: 木华    时间: 2014-5-25 09:24
补充解释原因,因为x++放到前面就会造成,还没有赋值你就将他打印出来了,这样它的结果自然为零。
作者: 为了明天    时间: 2014-5-25 09:38
本帖最后由 为了明天 于 2014-5-25 09:40 编辑

arr[x]=x;//x=0 arr[0]=0
x++;//x=1
System.out.println("arr["+x+"]="+arr[x]);arr[1]=0;//数组默认初始值为0
-------------------------------------------------------------------------------
arr[x]=x;//x=1 arr[1]=1
x++;//x=2
System.out.println("arr["+x+"]="+arr[x]);arr[2]=0;打印数组的角标大于赋值数组的角标,打印的是默认值。

循环结束x=100  arr[100]数组角标越界
作者: EDDY_Liang    时间: 2014-5-25 12:09
为了明天 发表于 2014-5-25 09:38
arr[x]=x;//x=0 arr[0]=0
x++;//x=1
System.out.println("arr["+x+"]="+arr[x]);arr[1]=0;//数组默认初始值 ...

打印的角标越界应该不能成功编译把,更别说运行语句了
作者: EDDY_Liang    时间: 2014-5-25 12:16
为了明天 发表于 2014-5-25 09:38
arr[x]=x;//x=0 arr[0]=0
x++;//x=1
System.out.println("arr["+x+"]="+arr[x]);arr[1]=0;//数组默认初始值 ...

。。。。刚刚试了一下。。角标越界是可以编译成功的。。。不好意思:L
作者: EDDY_Liang    时间: 2014-5-25 12:27
木华 发表于 2014-5-25 09:24
补充解释原因,因为x++放到前面就会造成,还没有赋值你就将他打印出来了,这样它的结果自然为零。 ...

你好,他这个打印语句打印的是arr[x] ,  x++在前面出现arr[x]应该也能打印出来把,
我刚刚试了一下,我也觉得这个我有点不能理解,
x++在输出语句的下面就可以打印1,2,3,4……,99,(会不会出角标范围先不管)
x++在输出语句前面就打印0,0,0,0,0,……,0.
在这两种里面x每次循环不是都在变吗?
所以arr[x]的值不是也要变吗??
作者: 木华    时间: 2014-5-25 13:09
EDDY_Liang 发表于 2014-5-25 12:27
你好,他这个打印语句打印的是arr[x] ,  x++在前面出现arr[x]应该也能打印出来把,
我刚刚试了一下,我也 ...

你没注意到,如果x++在前面的话,那么他是从arr[1]开始输出的,而此时没赋值就默认值为0.而赋值是从arr[0]开始的,所以赋值总比输出慢了一步,本来100个数就只能输出99个数。如果x++在后面,赋值和输出都是从arr[0]开始的。
作者: EDDY_Liang    时间: 2014-5-25 13:24
木华 发表于 2014-5-25 13:09
你没注意到,如果x++在前面的话,那么他是从arr[1]开始输出的,而此时没赋值就默认值为0.而赋值是从arr[0 ...

哦懂了,每次都是输出后一个角标的值,而这个角标都没赋值
作者: ↘ふ紫铯幽夢    时间: 2014-5-25 17:30
注意代码的逻辑。多分析,x++后在打印是打印出数组中下一个位置的值,而不是打印刚赋值的数组角标的值,所以打印的都是数组默认值0,且还会抛出角标越界异常。
作者: 丁绍然    时间: 2014-5-25 20:59
EDDY_Liang 发表于 2014-5-25 12:27
你好,他这个打印语句打印的是arr[x] ,  x++在前面出现arr[x]应该也能打印出来把,
我刚刚试了一下,我也 ...

是啊,我也跟你想的一样的
作者: 丁绍然    时间: 2014-5-25 21:09
EDDY_Liang 发表于 2014-5-25 13:24
哦懂了,每次都是输出后一个角标的值,而这个角标都没赋值

哦,明白。太对了。简单易懂




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2