1

オブジェクトの配列を作成して、ランダムに埋める必要があります。この配列には、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();}
    }

ただし、メンバーのいずれかのメソッドを呼び出そうとすると、「Symbol-Method getClasslist() が見つかりません」または setName など、呼び出そうとしているものはすべて表示されます。これを修正する方法はありますか?

4

3 に答える 3

1

Object[]プログラムの後半で、配列のすべての要素がオブジェクトとしてのみ使用される限り、これらすべての異なるクラスを に配置することはまったく問題ないと思います(わかりました、Objectそれは派手なインターフェイスではありません-しかし、これは単なる演習です)。

ただし、オブジェクト全体を初期化してCourseから、配列に入れる方がよいでしょう。

   else if(a == 3){
       Course course = new Course();
       count = count + 11;
       for(int j = 0; j<10; j++){
           String l = names[(int)(Math.random()*16)];
           course.getClasslist()[j].setName(l);//no casting needed
       }
       array[i]=course;//we can forget the real type of the object now
   }
于 2016-02-08T22:05:08.167 に答える
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 つの配列に共通のインターフェイスを持たずに多くの異なる型を混在させることは、コードの匂いが大きいです。

于 2016-02-08T20:38:27.170 に答える