1

後で管理するLibrarytype の多くのオブジェクトを格納できるtype の配列を作成しようとしています。深く掘り下げる前に、配列にメソッドを作成して、単に呼び出して配列を出力できるようにLibraryしようとしています。print()myLibrary.print()

public class Library {
    // Constructor

    public Library() {
    }

    public void print() {
        System.out.println("Library Sorted by Title");
    }
}

public class MediaManager {
    public static void main(String[] args) throws Exception {
        Library myLibrary[] = new Library[100];
        myLibrary.print();
    }
}

print()onがないというエラーが表示されLibrary[]ます。

この配列を印刷するにはどうすればよいですか? メインファイルの配列をループして、各オブジェクトで個別の印刷を呼び出すだけですか? この場合、配列をソートするためのカスタム メソッドをどこに記述しますか?

アップデート

私の課題からの要件: 「あなたのプログラムは、タイプ Library の 1 つの配列を使用して、入力ファイルから読み取ったすべての情報を格納します。」

「最上位には、Library というクラスがあります。Library には、Music、Book、および Movie の 3 つのサブクラスがあります。Music には、Song と Album の 2 つのサブクラスがあります。Book には、Fiction と Nonfiction の 2 つのサブクラスがあります。Movie、Fiction、 Nonfiction、Song、および Album にはサブクラスはありません。」

更新 2

これは CS-101 コース用です。Comparable を使用する必要はないと思います。

4

6 に答える 6

4

print()のメソッドを定義することに加えてLibrary; 次のことを試すことができます:

public void printLibrary (Library [] libraryArray) {
    for(Library library :  libraryArray) 
        library.print();
}

または、オーバーロードtoString()するLibrary場合は、次を使用できます。

public void printLibrary (Library [] libraryArray) {
    for(Library library :  libraryArray) 
        System.out.println(library);
}

そして、呼び出しは次のように行われます。

Library myLibrary[] = new Library[100];
printLibrary(myLibrary);

編集:

配列を並べ替えるには、クラスに実装Comparable<Library>して、単に使用する必要がありますLibrary

Arrays.sort(myLibrary);

配列をソートします。

于 2012-09-19T05:45:05.713 に答える
0

実際には、ライブラリタイプの配列からprintメソッドを呼び出しているので、ライブラリタイプのオブジェクト(ライブラリタイプの配列ではない)からprintメソッドを呼び出す必要があります。

public class Library {
    // Constructor

    public Library() {
    }

    public void print() {
        System.out.println("Library Sorted by Title");
    }
}

public class MediaManager {
    public static void main(String[] args) throws Exception {
        Library myLibrary[] = new Library[100];
        for (Library lb : myLibrary) {
            lb.print();
        }
    }
}

これは機能します。

于 2012-09-19T05:44:57.957 に答える
0

Libraryクラスでprintメソッドを宣言します。つまり、各Libraryオブジェクトでそのメソッドを呼び出すことができますが、各ライブラリではなくLibraryの配列を指すと、すべての配列のオブジェクトを印刷するためにできることは次のとおりです。

Library myLibrary[] = new Library[100];
for(Library library : myLibrary){ 
    library.print();
}
于 2012-09-19T05:46:27.613 に答える
0

質問が元の質問から2回更新された後、別の回答を追加する必要があります。

アップデート

私の割り当てからの要件:「プログラムは、入力ファイルから読み取られたすべての情報を格納するために、タイプLibraryの1つの配列を使用します。」「トップレベルには、ライブラリというクラスがあります。ライブラリには、音楽、本、映画の3つのサブクラスがあります。音楽には、歌とアルバムの2つのサブクラスがあります。本には、フィクションとノンフィクションの2つのサブクラスがあります。映画、フィクション、ノンフィクション、ソング、アルバムにはサブクラスはありません。」

更新2

これはCS-101コース用です。Comparableを使う必要はないと思います。

最善の解決策は次のようです。

A.問題で定義されているクラス構造を作成します。

class Library {...}
class Music extends Library {...}
class Book extends Library {...}
class Movie extends Library {...}
class Song extends Music {...}
class Album extends Music {...}
class Fiction extends Book {...}
class NonFiction extends Book {...}

B.toString()各クラスのオーバーライドメソッド。

C.for-eachループを使用して、オブジェクトを印刷するだけです。

for(Library library :  libraryArray) 
    System.out.println(library);

D.を使用する必要があります。Comparableまたは、注文/並べ替えComparatorを希望する場合。Array他に方法はありません。

于 2012-09-19T06:02:52.497 に答える
0

上記の説明から、より適切なデータ モデルは次のようになります。

public class Library {
   private Vector<Title> allTitles;

   public void print() {
     // Print all titles from the vector
     for(Title t : allTitles) {
        t.print();
     }
   }
}

public abstract class Title {
   public abstract void print();
}

public class Movie extends Title {
   public void print() {
      ... // print the Movie
   }
}

public class Music extends Title {
   public void print() {
      ... // print the Music
   }
}

public class Book extends Title {
   public void print() {
      ... // print the Book
   }
}
于 2012-09-19T05:50:58.710 に答える
0

myLibrary は Library 型の配列です。メソッドの印刷はありません。次のようなものを試してください:

Library myLibrary[] = new Library[100];
myLibrary[0] = new Library();    
myLibrary[0].print();
于 2012-09-19T05:42:26.200 に答える