2014-10-15 4 views
0

Так что я задаю вопрос: могу ли я приравнивать любые два объекта, даже если один из них является объектом, который может быть создан позже? Например: В приведенном ниже кодексе у меня есть класс создания фильма, и все хорошо. У меня нет никаких проблем с этим (его здесь для контекста), реальный вопрос находится в классе Movie Store. Класс Movie Store инициализирует три объекта фильма: Batman, Serenity и Clueless Я хочу написать метод, называемый rentMovie (String title), который при вызове будет проверять, будет ли строка заголовка параметра соответствовать строке заголовка одной из кино. Я знаю, что один из способов сделать это будет:Проверьте, соответствуют ли будущие объекты

if(title.equals("Batman")) //The title being any one of the initialized movies 
    { 
    movie1.rentMovie(); //rentMovie() also exists in class Movie and is the actual method which does the calculations 
    } 

однако это было бы взять несколько, если заявления и каждый раз, когда я хотел построить новый фильм в классе MovieStore я должна была бы добавить новую строку кода. Итак, есть ли способ сделать это «глобальным» (без публичного поля), чтобы мне не нужно было указывать конкретное название фильма String для арендыMovie (String title) равным?

Вот класс фильм:

public class Movie 
{ 
    private String title; 
    private int cost; 
    private int inStock; 
    private int totalRentals; 
    public Movie(String title, int cost) 
    { 
     this.title = title; 
     this.cost = cost; 
     inStock = 5+(int)(Math.random()*((15-5)+1)); //random value in interval [5-15] 
     totalRentals = 0;   
    } 
    public void rentMovie(String title)throws Exception 
    { 
     if(this.title.equals(title) && inStock>0) 
     { 
      totalRentals++; 
      inStock--;    
     } 
     else if(!this.title.equals(title)) 
     { 
      throw new Exception("False. movie rented does not match movie given");    
     } 
    } 
    public int getCost() 
    { 
     return cost; 
    } 

    public int getTotalRentals() 
    { 
     return totalRentals; 
    } 

    public void printDetails() 
    { 
     System.out.println("----------------"); 
     System.out.println("Title:\t\t"+title); 
     System.out.println("Cost:\t\t"+cost); 
     System.out.println("In Stock:\t"+inStock); 
     System.out.println("Rented:\t\t"+totalRentals); 
     System.out.println("----------------");   
    } 
} 

Вот класс магазин фильм: (я оставил, если заявление по существу неполными, потому что я в недоумении о том, что делать здесь)

public class MovieStore 
{ 
    private Movie movie1; 
    private Movie movie2; 
    private Movie movie3; 
    public MovieStore() 
    { 
     movie1 = new Movie("Batman",3); 
     movie2 = new Movie("Clueless",5); 
     movie3 = new Movie("Serenity",4); 

    } 
    public void rentMovie(String title) 
    { 
     if(title.equals())  
     {  
      //not sure what to put here.rentMovie(title); 
      // there is a bit of a redundacy check here because of Movie class rentMovie() method 
      //but I NEED to check the movie titles for equality here first that way I'm sure that rentMovie() 
      //from Movie class will run. 
      System.out.println("YES"); //used this just to check if what I was doing was working 
     } 
    } 
    public void printDetails() 
    { 
     movie1.printDetails(); 
     movie2.printDetails(); 
     movie3.printDetails(); 
     int total = (movie1.getCost()*movie1.getTotalRentals())+(movie2.getCost()*movie2.getTotalRentals())+(movie3.getCost()*movie3.getTotalRentals()); 
     System.out.println(" Total Revenues for Rentals were: " + "$"+total); 
    } 
} 
+0

Почему сниппетов бегунов? – ChiefTwoPencils

+0

Ahh новый для форумов, я думаю, он просто добавил их автоматически. – Scymantic

+0

Прочитайте, что делает класс 'HashMap'. Убедитесь, что вы это поняли. Затем сделайте это так, как описывает @MJSG. Это именно то, для чего нужны «HashMap» (и подобные классы). –

ответ

0

Тип Movie уже имеет свой титул. Вместо этого, ваш Movie метод rentMovie() должен выглядеть примерно,

public boolean rentMovie() { 
    if (inStock > 0) { 
    totalRentals++; 
    inStock--; 
    return true; 
    } 
    return false; 
} 

Тогда MovieStore может использовать List фильмов,

public class MovieStore { 
    private List<Movie> movies = new ArrayList<>(); 
    public MovieStore() { 
     movies.add(new Movie("Batman", 3)); 
     movies.add(new Movie("Clueless", 5)); 
     movies.add(new Movie("Serenity", 4)); 
    } 

    public boolean rentMovie(String title) { 
     for (Movie m : movies) { 
      if (m.getTitle().equalsIgnoreCase(title)) { 
       return m.rentMovie(); 
      } 
     } 
     return false; 
    } 

    public void printDetails() { 
     int total = 0; 
     for (Movie m : movies) { 
      m.printDetails(); 
      total += m.getCost() * m.getTotalRentals(); 
     } 
     System.out.println(" Total Revenues for Rentals were: " + "$"+total); 
    } 
} 
+0

Спасибо за быстрый ответ, я попробую сразу. – Scymantic

+0

ли класс List необходимо импортировать? Я делаю эти два класса с нуля, и я не ожидал необходимости импорта. Ошибка, которую я получаю: Не могу найти символ - класс Список – Scymantic

+0

Да. Импортируйте 'java.util.List' и' java.util.ArrayList'. –

1

В настоящее время объект фильма ищется используя название фильма, поэтому поиск основанное на решении, должно работать,

Пример: Создайте HashMap с ключом как lower_case (название фильма) и значением как объект Movie, это будет использоваться искать/находить, доступен ли фильм.

Пусть movieMap Б.Е. Hashmap

что-то вроде следующего:

Movie movie = movieMap.get(title.toLowerCase()); 
if (movie == null) { 
    // print error message 
} else { 
    System.out.println("YES"); 
} 
+0

Хотя вышеупомянутый ответ действительно сработал, я сохраню это в своем заднем кармане, спасибо! – Scymantic

+0

@ user3483662 Будьте осторожны со словами «выше» и «ниже». Ответы не обязательно остаются в одних и тех же позициях относительно друг друга или отображаются в одном порядке для всех пользователей. –

+0

Ха-ха, да, только что заметил, что около полуночи, где я нахожусь, я немного устал. Однако я буду помнить об этом для будущих должностей. – Scymantic

Смежные вопросы