Java自定义类数组的赋值问题

import java.util.Scanner;
class Catt{
String name;
int age;
String color;
public void set(String name,int age,String color){
this.name=name;
this.age=age;
this.color=color;
}
public String toString(){
return "姓名:"+this.name+"\t年龄:"+this.age+"\t毛色:"+this.color;
}
}
public class cat {
public static void main(String[] args){
Scanner in=new Scanner(System.in);
Catt a[]=new Catt[9];
int i=0;
for(i=0;i<10;i++){
System.out.print("请输入第"+(i+1)+"只猫的名字:");
String name=in.next();
System.out.print("请输入第"+(i+1)+"只猫的年龄:");
int age=in.nextInt();
System.out.print("请输入第"+(i+1)+"只猫的毛色:");
String color=in.next();
a[i].set(name,age,color);
String flag="^_^";
do{
System.out.print("是否继续?Y/N");
flag=in.next();
if(flag.equals("y")||flag.equals("Y")||flag.equals("n")||flag.equals("N")){
break;
}else{
System.out.print("输入错误,请重新输入。");
return;
}
}while(true);
if(flag.equals("n")||flag.equals("N")){
break;
}
}
for(int j=0;j<=i;j++){
System.out.println(a[j]);
}
}
}

各位大侠看一看,问题出在———a[i].set(name,age,color);,可是我不明白为什么?不是语法错误,但是运行到这就报错了,如下:

还请各位大侠不吝赐教啊~~^_^

第1个回答  2015-02-02
Catt a[]=new Catt[9];
说明你new了9个,这9个的下标是0,1,2。。。。8,
for(i=0;i<10;i++) i是0,1,2,。。。8,9,当i=9的时候,越界了

a[i].set(name,age,color);
此时,你的a[i]是等于null的,因为你没有做这个 a[i] = new Catt();
第2个回答  2015-02-02
  你好,使用set方式之前要创建a[i]的对象,加上一句代码就可以了
  a[i] = new Catt();
  希望可以帮到你追问

已解决,谢谢~追问一下,为什么在第一次声明a[]数组的时候没有把数组元素也都声明成Catt类?

追答

  你好,创建数组的时候会有默认值得,简单类型就是简单类型的初始值,对象类型就是对象类型的初始值,比如,int性的数组初始值都是0,对象型的初始化就是null

  

本回答被提问者采纳
相似回答