A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 丁绍然 中级黑马   /  2014-5-25 09:14  /  1500 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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]);
}
}
}

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

11 个回复

倒序浏览
程序调整一下即可
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++;
}
}
}

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
补充解释原因,因为x++放到前面就会造成,还没有赋值你就将他打印出来了,这样它的结果自然为零。
回复 使用道具 举报
本帖最后由 为了明天 于 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]数组角标越界

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
为了明天 发表于 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;//数组默认初始值 ...

打印的角标越界应该不能成功编译把,更别说运行语句了
回复 使用道具 举报
为了明天 发表于 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
回复 使用道具 举报
木华 发表于 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:38
8#
EDDY_Liang 发表于 2014-5-25 12:27
你好,他这个打印语句打印的是arr[x] ,  x++在前面出现arr[x]应该也能打印出来把,
我刚刚试了一下,我也 ...

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

哦懂了,每次都是输出后一个角标的值,而这个角标都没赋值
回复 使用道具 举报
注意代码的逻辑。多分析,x++后在打印是打印出数组中下一个位置的值,而不是打印刚赋值的数组角标的值,所以打印的都是数组默认值0,且还会抛出角标越界异常。
回复 使用道具 举报
EDDY_Liang 发表于 2014-5-25 12:27
你好,他这个打印语句打印的是arr[x] ,  x++在前面出现arr[x]应该也能打印出来把,
我刚刚试了一下,我也 ...

是啊,我也跟你想的一样的
回复 使用道具 举报
EDDY_Liang 发表于 2014-5-25 13:24
哦懂了,每次都是输出后一个角标的值,而这个角标都没赋值

哦,明白。太对了。简单易懂
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马