2016-09-30 3 views
0

私はいくつかのオブジェクトを作成し、それぞれをArrayListに追加するプログラムを持っています。そして、ArrayList内の各オブジェクトをループし、各オブジェクトの情報を表示するプロジェクトです。 foreachループ内のオブジェクトを他のクラスのメソッドを使用するために取得できません。ここに私のメインは、下部のトラブルループを含め、次のとおりです。私はcourse.getNameを交換する場合別のクラスのメソッドでforeachループを使う(Java)

public class ITECCourse { 

    public String name; 
    public int code; 
    public ArrayList<String> students; 
    public int maxStudents; 
    public String room; 

    ITECCourse(String courseName, int courseCode, int courseMaxStudents, String roomNum) { 

     name = courseName; 
     code = courseCode; 
     maxStudents = courseMaxStudents; 
     students = new ArrayList<String>(); 
     room = roomNum; 
    } 

    public String getName() { 
     return name; 
    } 

import java.util.ArrayList; 

public class ITECCourseManager { 

    public static void main(String[] args) { 

     ArrayList ITECCourse = new ArrayList(); 

     ITECCourse infotech = new ITECCourse("Info Tech Concepts", 1100, 5, "T3050"); 
     infotech.addStudent("Max"); 
     infotech.addStudent("Nancy"); 
     infotech.addStudent("Orson"); 
     ITECCourse.add(infotech); 

     ITECCourse java = new ITECCourse("Java Programming", 2545, 3, "T3010"); 
     java.addStudent("Alyssa"); 
     java.addStudent("Hillary"); 
     ITECCourse.add(java); 

     for (Object course : ITECCourse) { 
      System.out.println("Name: " + course.getName()); 
     } 
    } 
} 

そして、ここでは他のクラスは、私が使用する必要がある方法で私のプロジェクトであります()をjava.getName()で呼び出すと、コードが機能します。なぜオブジェクトを呼び出してコード内の同じ場所から直接メソッドを使うことができるのか、各オブジェクトのgetterを使うためにArrayListのforeachループを使うことができないのは混乱しています。

編集:ITECCourseforループでObjectを変更、最初にArrayList<ITECCourse>を宣言し、もちろんそうそこにISN ITECCourseITECCourseListにからの私のArrayListを変更します。単純なミスが2つだけ/ 3つの変更をしなければならなかった、答えてくれてありがとう私のITECCourseクラスと混同しないでください。あなたは、ループ内のObjectとしてcourseを定義したとObjectは方法getName()を持っていないためcourse.getName()

+1

https://docs.oracle.com/javase/tutorial/java/generics/ –

+0

変数をクラスと同じように指定することは非常に悪い考えです。 – shmosel

+1

1秒間考えてみてください。 'Object'はメソッド' getName() 'を持っていますか? – nhouser9

答えて

2

呼び出しが動作しません。型パラメータを宣言にArrayList<ITECCourse>のように追加すると、ObjectではなくITECCourseインスタンスのリストを反復処理できます。

変数の名前をITECCourseとすると、クラスと同じなので混乱することになります。あなたの変数の名前をitecCourseListのようにする方が良いでしょう。

関連する問題