2013-10-12 4 views
0

Цель: Добавить новый объект фильма в существующий фильм [], если есть место для добавления.Добавление объекта в массив объектов

Код:

// Create the new Movie object 
    Movie movieToAdd = new Movie (newTitle, newYear); 

    // Add it to the Array 
    count = addMovie(movieList, movieToAdd, count); 

Метод Код:

public static int addMovie (Movie[] movieArray, Movie addMe, int count) 
{ 
    if (count != movieArray.length) 
    { 
     count++; 
     movieArray[count] = addMe; 
     System.out.println("Movie added successfully!"); 
    } 
    else 
    { 
     System.out.println("Array size of " + movieArray.length + " is full. Could not add movie."); 
    } 


    return count; 
} 

ВОПРОС: В настоящее время, когда массив MovieList распечатывается, новые отпечатки входа в нуль, даже если созданный объект Movie напечатает просто отлично за пределами пути. Поэтому я предполагаю, что лучший способ добавить объект addMe в массив - создать второй новый объект Movie, инициализированный в массиве, и построить его по частям (так что addMe останется в памяти и «копией» addMe будут установлены в массив).

Это для меня не очень эффективно (я ненавижу дополнительные данные о ...). Есть лучший способ сделать это?

ПРИМЕЧАНИЕ. Объект Movie фактически имеет 10 частных элементов данных. Для этого упражнения мне нужно было только передать два параметра и установить значения по умолчанию для остальных. Вы можете себе представить, почему я не использовать десять заявлений GET, чтобы построить этот массив и дополнительные объекты, застрявшие в памяти ...

EDIT: Текущий распечатайте (Порции):

Menu options: 
1. Show all movies: 
2. Show movies sorted - manual 
3. Show movies sorted - auto 
4. Show Movie by Index 
5. Search for movie Linearly 
6. Search for movie using Binary Search 
7. Add a movie 
20. Quit 
Please choose an option from the menu: 1 to 20: 
7 
Let's add the information for the new movie. Give me a Title and 4-digit Year, and I'll fill in the rest. 
Title? 
Me 
Year of Release? 
Please enter a valid 4 digit year: 1000 to 9999: 
1213 
Movie added successfully! 
Menu options: 
1. Show all movies: 
2. Show movies sorted - manual 
3. Show movies sorted - auto 
4. Show Movie by Index 
5. Search for movie Linearly 
6. Search for movie using Binary Search 
7. Add a movie 
20. Quit 
Please choose an option from the menu: 1 to 20: 




25 | Les Vampires (1915)     | Louis Feuillade        | "Edouard Mathe, Marcel Levesque"                                       | 1915 | 0 | http://www.imdb.com/title/tt0006206/   | http://www.guardian.co.uk/film/movie/117077/vampires        | France  | Horror    | 175 
null | 176 
============================================================================= 

MORE редактирует : Код конструктора и сеттеров - все это ДОЛЖНО работать правильно.

public Movie (String t, int y) 
{ 
// passed in 
    this.title = setTitle(t); 
    this.year = setYear(y); 

// defaults 
    this.ranking = 0; 
    this.director = "No Director"; 
    this.actors = "No Actors"; 
    this.oscars = 0; 
    this.linkIMDB = "No IMDB Link"; 
    this.linkGuardian = "No Guardian Link"; 
    this.country = "No Country"; 
    this.genre = "No Genre";  
} 

    public String setTitle (String newTitle) 
{  
    if (newTitle == null) 
    { 
     this.title = "No Title"; 
    } 
    else 
    { 
     this.title = newTitle; 
    } 

    return this.title; 
} 

    public int setYear (int newYear) 
{ 
    if (newYear >= 999 && newYear <=10000) 
    { 
     this.year = newYear; 
    } 
    else 
    { 
     newYear = 0000; 
    } 

    return this.year; 
} 
+0

_ «когда массив MovieList распечатывается, новая запись печатает как нуль» _ Что? Где? Как? Этот код выглядит отлично. –

+0

Это не C# это? –

+2

Юрий 'System.out.println' является хорошим советом;) – Rogue

ответ

0

GOT IT!

Я использовал Count для установки индекса, в котором был сохранен новый фильм. Первоначальный подсчет был 176. Последний раз был 175. Я был приращением до установки фильма, поэтому фильм устанавливался с индексом 177. Так что 176 был пропущен.

Это была печать только на 176, потому что это был фактический счет, который не учитывал пропущенное пространство (в массиве, который не печатался, был добавлен дополнительный объект).

(проиллюстрировал это, когда я попытался добавить в массив 2 новых объекта Movie и получил нулевой, а затем первый объект только при печати).

решаемые путем переключения набора и приращение:

if (count <= movieArray.length) 
    { 
     movieArray[count] = addMe; 
     count++; 
     System.out.println("Movie added successfully!"); 
    } 
+0

Это имеет тот же эффект, что и @ ZongZhengLi [ответ] (http://stackoverflow.com/a/19330147/1281433), потому что _value_ of 'count ++' является значением 'count' _old_. Это точка оператора [_post_-increment] (https://en.wikipedia.org/wiki/Increment_and_decrement_operators). –

1

Не ясно, что вы просите, но эта часть неверно:

count++; 
movieArray[count] = addMe; 

Что делать, если movieArray.length 10 и count 9? Тогда он будет проходить count != movieArray.length проверки, а затем вы будете пытаться присвоить элемент с индексом 10. Используйте пост приращения:

movieArray[count++] = addMe; 
+0

. Счет всегда будет меньше размера массива, так как это число, генерируемое при первом просмотре фильмов из файла. См. Выше комментарии. –

+0

@ChristinaKline Это не единственное следствие; ваш код также никогда не будет присваивать первому элементу индекс 0. – Zong

+0

Эта программа начинается с загрузки в 176 фильмах из восьми разных файлов. Я просто хочу добавить в этот список. Назначение - сначала создать объект, а затем передать этот объект методу, который добавит его в существующий список фильмов. –

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