2013-11-16 5 views
0

У меня есть список песен, я пытаюсь произвести названия в качестве одной строки , напримерКак я могу вернуться назад?

ILo<Song> slist2 = new ConsLo<Song>(this.help, 
     new ConsLo<Song>(this.hotelc, this.mtlos)); 

должны производить «Помощь, Hotel California», но я получаю «Help, Hotel California» Это мой код

public String forCons(Song first, ILo<Song> rest) { 
    if(rest.equals(null)) { 
     return first.title; 
    } 
    return first.title + ", " + rest.accept(this); 
} 

где метод принимает просто рецидивирует метод на отдых.

Я также попытался это

public String forCons(Song first, ILo<Song> rest) { 
    ILo<Song> mt = new MtLo<Song>(); 
    if(rest.equals(mt)) { 
     return first.title; 
    } 
    return first.title + ", " + rest.accept(this); 
} 


public <R> R accept(ILoVisitor<R, T> ilov) { 
    return ilov.forCons(this.first, this.rest); 
} 

где

// A visitor for the ILo<T> classes that 
// and produces the result of the type R 
interface ILoVisitor<R, T> 

Ило представляет список элементов типа T, ConsLo представляет собой непустой список элементов типа Т

+0

Что делают ваши классы 'ConsLo' и' ILo'? – tbodt

+0

покажите нам метод 'accept()'. –

+0

отредактируйте ваш вопрос, а не вставьте код в комментарии, пожалуйста. Кроме того, вы используете 'ILoVisitor', размещаете этот интерфейс (и, возможно, и реализацию). –

ответ

0

Изменить

if(rest.equals(null)) { 
    return first.title; 
} 

До

if(rest == null){ 
    return first.title; 
} 
+1

это предложение в порядке, но OP не получает 'NullPointerException', поэтому это не причина, почему его функция не работает. –

+0

Он выводит то же самое –

0

Я действительно не понимаю, в чем ваши причины использовать пользовательские классы для структур данных, таких как списки.
Как насчет использования простых List<Song> из стандартной библиотеки?

int size; 

public static String forCons(Song first, List<Song> rest) { 
    size = rest.size();   

    if(size == 1) {  // last element 
     return first.getTitle(); 
    } 
    return first.getTitle() + ", " + forCons(rest.get(0), rest.subList(1, size)); 
} 
+0

Спасибо! Я не знаю, почему я не думал использовать размер(). –

+0

рассмотрите [принятие] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) ответ, если он решил вашу проблему. –

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