对象数组的创建
我的小班这学期刚开始学java,有个小班今天写程序时出现问题来问我,关于输入英文输出中文翻译的程序。发生了创建对象数组后无法使用对象的情况。他创建了以下这样的对象数组;
WordEC[] dictny = new WordEC[10];
WordEC类 如下
创建完成后,小班马上就想给对象赋值
于是
感觉一点问题也没有,创建对象,然后逐个赋值,没问题!不出意外的话意外发生了
报了个空指针异常,显示dictny[0]为空,不能调用setEng(String)方法。
为啥呢?想必小班很郁闷,感觉一点问题也没有。问题就出在调用对象方法赋值得先有对象才能调用。而创建对象数组只是声明了10个WordEC对象并没有实例化对象。相当于做了十次以下操作:
WordEC test;//声明一个WordEC对象
这样并没有实例化一个对象,在内存上也没有创建空间;
正确做法:
dictny[0] = new WordEC();
但是每个这样赋值就很麻烦,所以可以用for循环实例化每个对象。
for (int i = 0; i < dictny.length; i++) {
dictny[i] = new WordEC();
}
实例化之后再为每个对象的属性赋值,这样也很麻烦,还可以利用for循环遍历英文数组,和中文数组(要求中英文下标一一对应),可以做如下改动
先创建有参构造方法,利用有参构造方法给对象赋值,然后程序做如下改动
String[] eng = {"boy","girl"};
String[] chi = {"男孩","女孩"};
for(int i = 0; i < dictny.length; i++){
dictny[i] = new WordEC(eng[i],chi[i]);
}
接着就是逻辑问题了,穷举判断每个对象的英文等于输入内容,则输出这个对象的中文,但是这种方法很慢,穷举在一些查询中是下策,不应优先考虑,map集合是解决这题的好方法,它具备不重复,快查询的优点,但是考虑到小班还没学map集合,这也是他能想到的最优方法了。
整理不易,如有错误问题欢迎一起讨论。