在java中添加和检索对象数组中的元素

时间:2011-04-05 18:16:37

标签: java arrays

创建一个包含两个类的简单电影数据库,即Movie和Library.Library类有一个方法addMovie,它将电影对象添加到Movie对象数组中。另一种方法borrowMovie从电影对象数组中检索电影,returnMovie返回数组中的电影对象。它表示已经返回了一部电影,借用电影应该以一种你不能两次借电影的方式工作,除非它已经被返回了如果有人试图借用它。它会显示它已经借用了,如果它不在Movie数组中,它应该表明该电影不在目录中。 另一种方法printAvailableMovies应该打印库中的所有电影。这是我的电影和图书馆类的示例代码。

Movie.java

public class Movie {

    public String title;
    boolean borrowed,returned;

    // Creates a new Movie
    public Movie(String movieTitle) {

       title = movieTitle;
    }


    // Marks the movie as rented
    public void borrowed() {

        borrowed = true;
    }

    // Marks the movie as not rented
    public void returned() {

           returned = true;
    }

    // Returns true if the movie is rented, false otherwise
    public boolean isBorrowed() {

        if(borrowed && !returned)
          return true;
          else
          return false;

    }

    // Returns the title of the movie
    public String getTitle() {


      return title;
    }

    public static void main(String[] arguments) {
        // Small test of the Movie class
        Movie example = new Movie("Christmas in Kampala");
        System.out.println("Title (should be Christmas in Kampala): " + example.getTitle());
        System.out.println("Borrowed? (should be false): " + example.isBorrowed());
        example.borrowed();
        System.out.println("Borrowed? (should be true): " + example.isBorrowed());
        example.returned();
        System.out.println("Borrowed? (should be false): " + example.isBorrowed());
    }
} 

Library.java

public class Library {

    String address;
    boolean borrowMovie,returnMovie;
    Movie[] libMovies =new Movie[5] ;

    public Library(String libraryAddress){
           address = libraryAddress;
    }

    public void addMovie(Movie... movies ){
       int i = 0;
       for( Movie item: movies){
       libMovies[i] = item;}
    }
    public void borrowMovie(String movieTitle){
        for(Movie item: libMovies){
        if(movieTitle.equals(item.title))
        borrowMovie = true;
         else
         System.out.println("Sorry, this movie is not in our catalog.");
         }
        if(borrowMovie&&!returnMovie)
        System.out.println("You have successfully borrowed " + movieTitle);
        else
        System.out.println("Sorry, this movie is already borrowed.");

    }*/
    public void returnMovie(String movieTitle){
           returnMovie = true;
           System.out.println("You successfully returned " + movieTitle);
           }

    public static void printOpeningHours(){
       System.out.println ("Libraries are open daily from 9am to 5pm.");
    }
    public void printAddress(){
          System.out.println( address);
    }
    public void printAvailableMovies(){

       for( int i =0;i < libMovies.length;i++){
       System.out.println(libMovies[i].getTitle());}
      // if(item == null)
       //System.out.println("No movie in catalog.");

    }
    public static void main(String[] args) {
        // Create two libraries
        Library firstLibrary = new Library("Plot 11, Kafene Road");
        Library secondLibrary = new Library("Plot 28, Kayembe Road");

        // Add four movies to the first library
        firstLibrary.addMovie(new Movie("Yogera"));
        firstLibrary.addMovie(new Movie("The Last King of Scotland"));
        firstLibrary.addMovie(new Movie("The Hostel"));
        firstLibrary.addMovie(new Movie("Christmas in Kampala"));

        // Print opening hours and the addresses
        System.out.println("Library hours:");
        printOpeningHours();
        System.out.println();

        System.out.println("Library addresses:");
        firstLibrary.printAddress();
        secondLibrary.printAddress();
        System.out.println();


        // Try to borrow Christmas in Kampala from both libraries
        System.out.println("Borrowing Christmas in Kampala:");
        firstLibrary.borrowMovie("Christmas in Kampala");
        firstLibrary.borrowMovie("Christmas in Kampala");
        secondLibrary.borrowMovie("Christmas in Kampala");
        System.out.println();

        Print the titles of all available movies from both libraries
        System.out.println("Movies available in the first library:");
        firstLibrary.printAvailableMovies();
        System.out.println();
        System.out.println("Movies available in the second library:");
        secondLibrary.printAvailableMovies();
        System.out.println();

        // Return Christmas in Kampala to the first library
        System.out.println("Returning Christmas in Kampala:");
        firstLibrary.returnMovie("Christmas in Kampala");
        System.out.println();

        // Print the titles of available movies from the first library
        System.out.println("Movies available in the first library:");
        firstLibrary.printAvailableMovies();

    }
} 

Library.java的主要方法应该输出

  

图书馆时间:

     

图书馆每天上午9点至下午5点开放。

     

图书馆地址:

     

地图11,Kafene Road

     

在坎帕拉借圣诞节:

     

你在坎帕拉成功借了圣诞节

     

抱歉,这部电影已经借来了。

     

抱歉,这部电影不在我们的目录中。

     

第一个库中提供的电影:

     

Yogera

     

苏格兰最后的国王

     

旅馆

     

第二个库中提供的电影:

     

目录中没有电影

     

在坎帕拉回归圣诞节:

     

你在坎帕拉成功回归圣诞节

     

第一个库中提供的电影:

     

Yogera

     

苏格兰最后的国王

     

旅馆

     

坎帕拉的圣诞节。

现在Movie.Java工作得很好,不需要修改,但是Library.java是一个主要的痛苦来源,因为我只能使它能够打印库地址。方法borrowMovie,addMovie,returnMovie和printAvailableMovies是罪魁祸首,因为它们涉及操纵Movie Objects的数组。当你测试Library.java时,main方法不应该改变并且输出应该如上所述。如果你必须为这些方法更改代码,因为我的想法似乎不起作用。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:3)

我做了一些修改 - 基本上我从Movie删除了不必要的代码,将库更改为基于Map,因为每个标题只有一个副本 - 这样可以加快搜索速度。我添加了一些“错误处理” - 但我认为你可以删除它们并用System.err.println代替这段代码的异常。

Movie.java:

public class Movie
{
    public String title;
    boolean borrowed;

    // Creates a new Movie
    public Movie(String movieTitle)
    {
        title = movieTitle;
    }

    // Marks the movie as rented
    void borrow() throws Exception
    {
        if (this.borrowed)
        {
            throw new Exception("The movie <" + this.title + "> is already borrowed - cannot borrow it again");
        }
        else
        {
            this.borrowed = true;
        }
    }

    // Marks the movie as not rented
    void returnMovie() throws Exception
    {
        if (this.borrowed)
        {
            this.borrowed = false;
        }
        else
        {
            throw new Exception("The movie <" + this.title + "> has not been borrowed - it cannot be returned");
        }
    }

    // Returns true if the movie is rented, false otherwise
    public boolean isBorrowed()
    {
        return this.borrowed;
    }

    // Returns the title of the movie
    public String getTitle()
    {
        return title;
    }

    public static void main(String[] arguments) throws Exception
    {
        // Small test of the Movie class
        Movie example = new Movie("Christmas in Kampala");
        System.out.println("Title (should be Christmas in Kampala): " + example.getTitle());
        System.out.println("Borrowed? (should be false): " + example.isBorrowed());
        example.borrow();
        System.out.println("Borrowed? (should be true): " + example.isBorrowed());
        example.returnMovie();
        System.out.println("Borrowed? (should be false): " + example.isBorrowed());
    }
}

Library.java:

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

public class Library
{
    String address;
    Map<String, Movie> movieLibrary;

    public Library(String libraryAddress)
    {
        address = libraryAddress;
        this.movieLibrary = new HashMap<String, Movie>();
    }

    public void addMovie(Movie... movies)
    {
        for (Movie item : movies)
        {
            this.movieLibrary.put(item.getTitle(), item);
        }
    }

    public void borrowMovie(String movieTitle)
    {
        Movie movie = this.movieLibrary.get(movieTitle);

        if (movie == null) // Not in libray
        {
            System.out.println("Sorry, this movie is not in our catalog.");
        }
        else
        {
            if (movie.isBorrowed())
            {
                System.out.println("Sorry, this movie is already borrowed.");
            }
            else
            {
                try
                {
                    movie.borrow();
                    System.out.println("You have successfully borrowed " + movieTitle);
                }
                catch (Exception e)
                {
                    System.out.println("An internal error has occured while attempting to borrow " + movieTitle + ", error details: " + e.getMessage());
                }
            }
        }
    }

    public void returnMovie(String movieTitle)
    {
        Movie movie = this.movieLibrary.get(movieTitle);

        if (movie == null) // Not in libray
        {
            System.out.println("Sorry, this movie is not in our catalog.");
        }
        else
        {
            if (movie.isBorrowed())
            {
                try
                {
                    movie.returnMovie();
                    System.out.println("You successfully returned " + movieTitle);
                }
                catch (Exception e)
                {
                    System.out.println("An internal error has occured while attempting to return " + movieTitle + ", error details: " + e.getMessage());
                }
            }
            else
            {
                System.out.println("Sorry, this movie is has not been borrowed.");
            }
        }
    }

    public static void printOpeningHours()
    {
        System.out.println("Libraries are open daily from 9am to 5pm.");
    }

    public void printAddress()
    {
        System.out.println(address);
    }

    public void printAvailableMovies()
    {
        Collection<Movie> movies = this.movieLibrary.values();

        if (movies.size() > 0)
        {
            for (Movie movie : movies)
            {
                if (!movie.isBorrowed())
                {
                    System.out.println(movie.getTitle());
                }
            }
        }
        else
        {
            System.out.println("No movie in catalog.");
        }

    }

    public static void main(String[] args)
    {
        // Create two libraries
        Library firstLibrary = new Library("Plot 11, Kafene Road");
        Library secondLibrary = new Library("Plot 28, Kayembe Road");

        // Add four movies to the first library
        firstLibrary.addMovie(new Movie("Yogera"));
        firstLibrary.addMovie(new Movie("The Last King of Scotland"));
        firstLibrary.addMovie(new Movie("The Hostel"));
        firstLibrary.addMovie(new Movie("Christmas in Kampala"));

        // Print opening hours and the addresses
        System.out.println("Library hours:");
        printOpeningHours();
        System.out.println();

        System.out.println("Library addresses:");
        firstLibrary.printAddress();
        secondLibrary.printAddress();
        System.out.println();

        // Try to borrow Christmas in Kampala from both libraries
        System.out.println("Borrowing Christmas in Kampala:");
        firstLibrary.borrowMovie("Christmas in Kampala");
        firstLibrary.borrowMovie("Christmas in Kampala");
        secondLibrary.borrowMovie("Christmas in Kampala");
        System.out.println();

        // Print the titles of all available movies from both libraries
        System.out.println("Movies available in the first library:");
        firstLibrary.printAvailableMovies();
        System.out.println();
        System.out.println("Movies available in the second library:");
        secondLibrary.printAvailableMovies();
        System.out.println();

        // Return Christmas in Kampala to the first library
        System.out.println("Returning Christmas in Kampala:");
        firstLibrary.returnMovie("Christmas in Kampala");
        System.out.println();

        // Print the titles of available movies from the first library
        System.out.println("Movies available in the first library:");
        firstLibrary.printAvailableMovies();

    }
}

如果您关心电影的顺序,请使用ArrayListLinkedList代替HashMap(并从movieLibray更改Map成员到List

答案 1 :(得分:1)

如果您需要添加和删除内容,最好使用List而不是数组。它会让你的生活更轻松。

基本列表示例:

List<String> ls = new ArrayList<String>();
ls.add("one");
ls.add("Three");
ls.add("two");
ls.add("four");

for(String value : ls) {
  System.out.println("Value :"+value);
}

ls.remove("two");

for(String value : ls) {
  System.out.println("Value :"+value);
}

我在第一次传球时看到的问题:

addMovie()永远不会增加i,因此除了数组的第一个索引之外,你永远不会写任何东西。此方法也非常不安全,因为传入比您创建的数组更长的电影列表会更容易。这让我回到了第一点。

如果方法被借用或退回,您正在使用实例变量,但您可以只借一部电影。

答案 2 :(得分:0)

立即尝试:

public class Library {

    String address;
    boolean borrowMovie,returnMovie;
    Movie[] libMovies =new Movie[5] ;
    int count = 0;

    public Library(String libraryAddress){
           address = libraryAddress;
    }

    public void addMovie(Movie... movies ){
       for( Movie item: movies){
       libMovies[count++] = item;}
    }

    public void borrowMovie(String movieTitle) {
        for (Movie item : libMovies) {
            if (movieTitle.equals(item.title)) {
                borrowMovie = true;
                break;
            }

        }

        if(!borrowMovie) {
            System.out.println("Sorry, this movie is not in our catalog.");
            return;
        }


        if (borrowMovie && !returnMovie)
            System.out.println("You have successfully borrowed " + movieTitle);
        else
            System.out.println("Sorry, this movie is already borrowed.");

    }
    public void returnMovie(String movieTitle){
           returnMovie = true;
           System.out.println("You successfully returned " + movieTitle);
           }

    public static void printOpeningHours(){
       System.out.println ("Libraries are open daily from 9am to 5pm.");
    }
    public void printAddress(){
          System.out.println( address);
    }
    public void printAvailableMovies(){

       for( int i =0;i < libMovies.length;i++){
           if(libMovies[i] != null)
               System.out.println(libMovies[i].getTitle());}
      // if(item == null)
       //System.out.println("No movie in catalog.");

    }
    public static void main(String[] args) {
        // Create two libraries
        Library firstLibrary = new Library("Plot 11, Kafene Road");
        Library secondLibrary = new Library("Plot 28, Kayembe Road");

        // Add four movies to the first library
        firstLibrary.addMovie(new Movie("Yogera"));
        firstLibrary.addMovie(new Movie("The Last King of Scotland"));
        firstLibrary.addMovie(new Movie("The Hostel"));
        firstLibrary.addMovie(new Movie("Christmas in Kampala"));

        // Print opening hours and the addresses
        System.out.println("Library hours:");
        printOpeningHours();
        System.out.println();

        System.out.println("Library addresses:");
        firstLibrary.printAddress();
        secondLibrary.printAddress();
        System.out.println();


        // Try to borrow Christmas in Kampala from both libraries
        System.out.println("Borrowing Christmas in Kampala:");
        firstLibrary.borrowMovie("Christmas in Kampala");
        firstLibrary.borrowMovie("Christmas in Kampala");
//        secondLibrary.borrowMovie("Christmas in Kampala");
        System.out.println();

//        Print the titles of all available movies from both libraries
        System.out.println("Movies available in the first library:");
        firstLibrary.printAvailableMovies();
        System.out.println();
        System.out.println("Movies available in the second library:");
        secondLibrary.printAvailableMovies();
        System.out.println();

        // Return Christmas in Kampala to the first library
        System.out.println("Returning Christmas in Kampala:");
        firstLibrary.returnMovie("Christmas in Kampala");
        System.out.println();

        // Print the titles of available movies from the first library
        System.out.println("Movies available in the first library:");
        firstLibrary.printAvailableMovies();

    }
}