Java中自定义对象数组的自定义方法

时间:2012-09-19 05:38:59

标签: java arrays

我正在尝试创建一个类型为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()上没有Library[]

我将如何打印此阵列?我只是循环遍历主文件中的数组并在每个对象上调用单独的打印吗?如果是这种情况,我会在哪里编写自定义方法来对数组进行排序?

更新

我的任务要求: “你的程序将使用一个类型库数组来存储从输入文件中读取的所有信息。”

“在顶层,你将有一个名为Library的类。图书馆将有三个子类:Music,Book和Movie。音乐将有两个子类:Song和Album。Book将有两个子类:Fiction和Nonfiction。 ,小说,非小说类,歌曲和专辑将没有任何子类。“

更新2

这是CS-101课程。我觉得我不需要使用Comparable。

6 个答案:

答案 0 :(得分: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);

对数组进行排序。

答案 1 :(得分:0)

myLibrary是一个类型库的数组。它没有打印方法。你应该尝试类似的东西:

Library myLibrary[] = new Library[100];
myLibrary[0] = new Library();    
myLibrary[0].print();

答案 2 :(得分:0)

您实际上是从Library类型Array调用print方法,您应该从Library类型对象(而不是Library类型Array)调用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();
        }
    }
}

这样可行。

答案 3 :(得分:0)

你在Library类中声明了一个print方法,这意味着你可以在每个Library对象中调用该方法,但是你指向一个Library数组而不是每个库,你可以做的就是打印所有数组的对象: / p>

Library myLibrary[] = new Library[100];
for(Library library : myLibrary){ 
    library.print();
}

答案 4 :(得分: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
   }
}

答案 5 :(得分:0)

我必须在问题上添加另一个答案后,从原始问题更新两次:

  

更新

     

我的任务要求:“您的程序将使用一个类型库数组来存储从输入文件中读取的所有信息。”   “在顶层,你将有一个名为Library的类。图书馆将有三个子类:Music,Book和Movie。音乐将有两个子类:Song和Album。Book将有两个子类:Fiction和Nonfiction。电影,小说,非小说类,歌曲和专辑将没有任何子类。“

     

更新2

     

这是CS-101课程。我觉得我不需要使用Comparable。

最佳解决方案似乎是:

一个。创建问题中定义的类结构。

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()方法。

℃。只需使用for-each循环并打印对象。

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

d。 如果您想要Comparable进行排序/排序,则必须使用ComparatorArray;没有其他办法。