2015-05-06 7 views
0

У меня введен пользовательский указатель. Этот индекс будет использоваться для поиска определенного объекта под названием Movie в массиве списков, который называется movieList. В этом объекте я хочу найти значение genreOfMovie и преобразовать его в String.Как получить строку из массива списка объектов в java?

Я использую эту строку кода:

Movie genreOfMovie = (Movie) movieList.get(Integer.parseInt(index) - 1);

установить VeriTable к тому, что пользователь ищет.

Однако, когда я запускаю программу, я не получаю строку жанра, то, что я получаю, это нечто похожее на [email protected]. База данных, если имя программы и видеофильма имя объекта, так что @71aa1ce9 и как я могу изменить это, как

Movie genreOfMovie = (Movie) movieList.get(Integer.parseInt(index) - 1); 

кода для печати какой-то строки, как действия, потому что это то, что хранилось в там.

 String index = TxtSearch.getText(); 
     Movie genreOfMovie = (Movie) movieList.get(Integer.parseInt(index) - 1); 
     int counter = 0; 
     do { 
      counter++; 
     } while (CbxGenres.getComponent(counter) != genreOfGame.toString()); 
+3

Замечание: это плохая идея, чтобы непосредственно разобрать строку и предположить, что она представляет действительный индекс в списке. Вход, поступающий непосредственно от пользователя, должен всегда ** обрабатываться с большой осторожностью. Вы должны: обрабатывать как минимум два случая ошибок (вход не число, разборный номер не является допустимым индексом) – GhostCat

+0

, помимо других вещей, о которых уже упоминалось, вы не можете напрямую сравнивать строки, лучше использовать метод '.equals()': 'CbxGenres.getComponent (counter) .equals (genreOfGame.toString())' –

ответ

0

Вам необходимо переопределить метод toString() в вашем классе Movie. Здесь вы можете собрать описание объекта, используя его поля экземпляра, а также любую другую строку.

public class Movie { 
    private String name; 
    private String genre; 

    ... 

    @Override 
    public String toString() { 
     return genre; 
     // alternatively, you can concatenate data into a String and return that, e.g. return name + " (" + genre + ")" 
    } 
} 

На стороне записки, почему не ваш movieList имеют общий тип, например, List<Movie>?

+0

Мне жаль, что я очень новичок в этом, что делает @Override на самом деле? И как работает конкатенация данных в этом случае? – Dzyuv001

+0

'@ Override' указывает, что вы явно переопределяете метод от предка. Если вы аннотируете метод с этим, но вы на самом деле ничего не переопределяете - возможно, через опечатку - компилятор будет жаловаться. –

+0

Вы можете заставить тело 'toString()' выглядеть так: 'return 'Movie:« + name »- это объединяет строковый литерал' Movie: 'с именем фильма, хранящегося объектом Movie. –

0

Что вы делаете, это печатать интерпретацию строк для объекта Movie. Вы хотите создать собственную интерпретацию строк. Вы делаете это, переопределяя метод toString() в вашем объекте фильма и возвращая жанр.

Пример:

@Override 
public String toString() { 
    return this.genre; 
} 
0

«@ 71aa1ce9» это имя экземпляра объекта

Movie genreOfMovie = (Movie) 

это экземпляр одного фильма, чтобы жанр вы, вероятно, нужно вызвать какой-либо метод на фильма изображение self .. like .getGenre() или что-то в этом роде

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