访问Object []数组

时间:2016-02-08 20:33:51

标签: java arrays object cannot-find-symbol

我必须创建一个对象数组,然后随机填充。在这个数组中,我需要放100个随机,人(基础)学生(子),教授(子),课程(学生和教授的数组)和圆(无关)。我还必须为每个进入阵列的人(包括教授和学生)命名并计算。

    Object[] array = new Object[100];
    String[] names = new String[]{"Ben","Anne","Joe","Sue","John","Betty","Robert","Mary",
                                  "Mark","Jane","Paul","Willow","Alex","Courtney","Jack",
                                  "Rachel"};
    int count = 0;
    for(int i=0; i<100; i++){
       int a = (int)(Math.random()*5);
       String n = names[(int)(Math.random()*16)];
       if(a == 0){array[i]= new Person(n); count++;}
       else if(a == 1){array[i]= new Student(n); count++;}
       else if(a == 2){array[i]= new Professor(n); count++;}
       else if(a == 3){
           array[i]= new Course();
           count = count + 11;
           for(int j = 0; j<10; j++){
               String l = names[(int)(Math.random()*16)];
               array[i].getClasslist()[j].setName(l);}
       }
       else if(a == 4){array[i]= new Circle();}
    }

每当我尝试调用其中一个成员的方法时,它会告诉我“找不到符号 - 方法getClasslist()”或setName或我想要调用的任何内容。知道如何解决这个问题吗?

3 个答案:

答案 0 :(得分:0)

就您的实际代码而言,您需要以您编写的方式明确地投射array[i]

for(int j = 0; j<10; j++){
   String l = names[(int)(Math.random()*16)];
   ((Course) array[i]).getClasslist()[j].setName(l);
}

...尽管在一个数组中没有通用接口混合许多不同类型的整个事情是一个巨大的代码味道。

答案 1 :(得分:0)

如果有一系列混合对象,则必须先检查对象的实际类型,然后才能调用特定于类型的方法。为此,请使用instanceof

for (Object obj : array) {
    if (obj instanceof Person) { // includes subclasses Student and Professor
        Person person = (Person)obj;
        // now you can call Person methods
    } else if (obj instanceof Course) {
        Course course = (Course)obj;
        for (Object member : course.getMembers()) {
            if (member instanceof Person) {
                Person person = (Person)member;
                // now you can call Person methods
            }
        }
    }
}

答案 2 :(得分:0)

我认为将所有这些不同的类放在Object[]中是完全可以的,只要在程序的后半部分,数组的所有元素都只用作对象(好的,{{1}这不是一个奇特的界面 - 但这只是一个练习。)

但是最好初始化整个Object对象,然后才将它放入数组中:

Course