黑马程序员技术交流社区

标题: 关于数组的初始化问题 [打印本页]

作者: 张淼    时间: 2012-9-19 23:12
标题: 关于数组的初始化问题
运行语句:float x[] = new float[10];  则下面哪个选项是不正确的?
A.    x[9] = 0
B.     x[10] = 0.0f
C.    x[9] = 0.0fx.
D.    x.length = 10

这个题的答案是CD,不知是答案不对,还是我理解的不对。

A中 x[9]不是应该为0.0f吗
B中  
x[10] = 0.0f  这个明显是错的吧,数组角标越界了
C中  这个明显是错的
D中 x.length = 10  这个是对的吧
那么答案是不是应该是ABC呢?

作者: 严海荣    时间: 2012-9-19 23:23
我也选ABC
作者: 赵永康    时间: 2012-9-19 23:32
应该是bc吧  个人见解
作者: 夏天    时间: 2012-9-19 23:34
本帖最后由 夏诗瑶 于 2012-9-20 07:26 编辑

首先.A是对的。这是一个自动类型转换。不管是赋值还是判断,都是对的。
大家可以分别用eclipse输出System.out.println(a[9]=0);System.out.println(a[9]==0)试试看。发现不管是编译还是运行都是可以i的,而且结果为真。

然后.B数组角标越界,应该是报IndexOutOfBoundsException异常
C是明显错误的。
最后,再说D: x.length本身没任何错误,但是它初始化话的时候就固定长度了,相当于一个常量,而常量是不能被赋值的。但如果你认为D是判断长度是否为10,D又是正确的了。



ps:看大家别都在纠结了争论这题。只要知道此题ABCD分别考查什么,不要太在意最后选什么,关键是弄懂考点和原理就行了。
作者: 刘 佳    时间: 2012-9-19 23:38
ABC,你答的对。。   数组默认值 int是0    double是0.0  float是0.0f  boolean是false。  正好笔记上面有
作者: 赵家阳    时间: 2012-9-20 00:04
本帖最后由 赵家阳 于 2012-9-20 00:06 编辑

数组的角标是从0开始的,所以一个数组中最大的角标是  arr.length-1            
一个数组的长度始终都比他的角标要多1,
这个题中,A肯定没有错,尽管赋值的是整数,实际上已经强制类型转换了,由int类型的转向float类型,因为,float用8个字节表示,int用4个字节表示,java中强制转换时,由小向大转换,所以输出时,就成了0.0;
B,越界,肯定错!
C,不知是故意写的还是不小心写的,不过这样的语句在java中编译无法通过!(报错:Syntax error on token "x", delete this token)
D,正确!


所以我选:AD
作者: 张忠豹    时间: 2012-9-20 00:18
针对这一题的大致分析:
A.    x[9] = 0             //这句话,是正确的,java中的自动类型提升,楼主可以可以编译试试

B.     x[10] = 0.0f     //正如楼主分析的一样,报错,数组越界异常

C.    x[9] = 0.0fx.     //编译不通过

D.    x.length = 10    //绝对正确,数组的长度

所以这一题的选择应该是:B C


作者: 寇龙飞    时间: 2012-9-20 04:50
错误的是:ABC

不过楼主理解有误哦。A选项错误是因为,x[9]=0.0而非0.0f

代码中float要写成0.0f是要告诉计算机这是浮点数,开辟此浮点数变量存储空间大小会不同,而计算机自己使用时,为0.0,你可以打印看下。

另外,你们别误会,这题目, 选项是判断结果,不是需要运行的代码(要运行,语句末要加分号滴)

作者: 寇龙飞    时间: 2012-9-20 07:39
目测我没有钻牛角尖哦。。。
作者: 张淼    时间: 2012-9-20 08:11
各位说的都很有道理,学习了。
作者: 罗雪梅    时间: 2012-9-20 08:44
{:soso_e113:}观看一下
作者: 张淼    时间: 2012-9-20 08:51
罗雪梅 发表于 2012-9-20 08:44
观看一下

观看一下就完了?给我指导一下啊。
作者: 罗雪梅    时间: 2012-9-20 11:18
你这技术分长的太快了吧





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