创建一个包含两个类的简单电影数据库,即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方法不应该改变并且输出应该如上所述。如果你必须为这些方法更改代码,因为我的想法似乎不起作用。任何帮助将不胜感激。
答案 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();
}
}
如果您关心电影的顺序,请使用ArrayList
或LinkedList
代替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();
}
}