Ciao ho un problema su un esercizio che richiede di aggiungere degli argomenti ad un capitolo usando il metodo addTopic(Topic); tale metodo aggiunge un dato argomento al capitolo e, ricorsivamente, tutti i sotto-argomenti. Per esempio, se Class è un sotto-argomento di Java, e Abstract Class è un sotto-argomento di Class, aggiungere l’argomento Java significa aggiungere anche Class e Abstract Class, di conseguenza fatto cio il metodo getTopics() restituisce tutti gli argomenti inseriti con addTopic(), senza ripetizioni e ordinati alfabeticamente.
Scusate sono nuovo spero che la formattazione del codice sia corretta, sennò mi scuso a prioiri, comunque questo pezzo di codice non mi ritorna tutti i sotto-argomenti.
package it.polito.oop.books;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Stream;
import static java.util.stream.Collectors.*;
import java.util.ArrayList;
public class TheoryChapter {
private String title;
private int numPages;
private String text;
List<Topic> topics = new LinkedList<>();
public TheoryChapter(String title, int numPages, String text) {
// TODO Auto-generated constructor stub
this.title = title;
this.numPages = numPages;
this.text = text;
}
public String getText() {
return text;
}
public void setText(String newText) {
this.text = newText;
}
public List<Topic> getTopics() {
List<Topic> elements = new ArrayList<>();
elements = Stream.concat(topics.stream(), topics.stream().flatMap(f->f.subTopics.stream())).distinct().sorted().collect(toList());
return elements;
}
public String getTitle() {
return title;
}
public void setTitle(String newTitle) {
this.title = newTitle;
}
public int getNumPages() {
return numPages;
}
public void setNumPages(int newPages) {
this.numPages = newPages;
}
public void addTopic(Topic topic) {
topics.add(topic);
}
}
Mentre il metodo di controllo deve restituire true se tutti gli argomenti specificati in tutti i capitoli di esercizi sono contenuti in almeno un capitolo di teoria. La classe degli esercizi è simile a quella di teoria. Il problema che il metodo di controllo si trova in un altra classe.
package it.polito.oop.books;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import static java.util.stream.Collectors.*;
import static java.util.Comparator.*;
import java.util.ArrayList;
public class Book {
private Map<String,Topic> topics = new HashMap<>();
private Map<String,Question> questions = new HashMap<>();
private Map<String,TheoryChapter> theoryChapters = new HashMap<>();
private Map<String,ExerciseChapter> exerciseChapters = new HashMap<>();
private Map<String,Assignment> assignements = new HashMap<>();
/**
* Creates a new topic, if it does not exist yet, or returns a reference to the
* corresponding topic.
*
* @param keyword the unique keyword of the topic
* @return the {@link Topic} associated to the keyword
* @throws BookException
*/
public Topic getTopic(String keyword) throws BookException {
if(keyword==null || keyword=="") {
throw new BookException();
}
if(!topics.containsKey(keyword)) {
Topic t = new Topic(keyword);
topics.put(keyword, t);
return t;
} else {
return topics.get(keyword);
}
}
public Question createQuestion(String question, Topic mainTopic) {
Question q = new Question(question,mainTopic);
questions.put(question, q);
return q;
}
public TheoryChapter createTheoryChapter(String title, int numPages, String text) {
TheoryChapter tc = new TheoryChapter(title,numPages,text);
theoryChapters.put(title, tc);
return tc;
}
public ExerciseChapter createExerciseChapter(String title, int numPages) {
ExerciseChapter ec = new ExerciseChapter(title,numPages);
exerciseChapters.put(title, ec);
return ec;
}
public List<Topic> getAllTopics() {
return topics.values().stream().distinct().sorted().collect(toList());
}
public boolean checkTopics() {
return false;
}
Scusate se posto doppio problema ma sono bloccato con questi due metodi.