1

我正在尝试创建一个 type 数组Library,我可以在其中存储许多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 的数组来存储从输入文件中读取的所有信息。”

“在顶层,您将有一个名为 Library 的类。Library 将有三个子类:Music、Book 和 Movie。Music 将有两个子类:Song 和 Album。Book 将有两个子类:Fiction 和 Nonfiction。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

myLibrary 是一个库类型的数组。它没有打印方法。您应该尝试以下方法:

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

您实际上是从库类型数组调用打印方法,您应该从库类型对象(而不是库类型数组)调用打印方法。

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 类中声明了一个打印方法,这意味着您可以在每个 Library 对象中调用该方法,但是您指向一个 Library 数组而不是每个库,您可以打印所有数组的对象是:

Library myLibrary[] = new Library[100];
for(Library library : myLibrary){ 
    library.print();
}
于 2012-09-19T05:46:27.613 回答
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

我一定会添加另一个答案帖子,该问题从原始问题更新了两次:

更新

我的作业要求:“您的程序将使用一个类型为 Library 的数组来存储从输入文件中读取的所有信息。” “在顶层,您将有一个名为 Library 的类。Library 将有三个子类:Music、Book 和 Movie。Music 将有两个子类:Song 和 Album。Book 将有两个子类:Fiction 和 Nonfiction。Movie、Fiction、 Nonfiction、Song 和 Album 不会有任何子类。”

更新 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.您必须使用ComparableComparator在您想要Array订购/分类的情况下使用;没有其他办法。

于 2012-09-19T06:02:52.497 回答