PDA

View Full Version : [Java] - Metodi double con lista


Galven
16-09-2018, 11:59
Ciao a tutti essendo nuovo ho cercato la sezione per presentarsi, ma non l'ho trovata, mi scuso se vi richiedo un problema senza essermi presentato.

Il metodo addResponse(Question, List<String>) aggiunge le risposte dello studente alla domanda data: la lista contiene le risposte che lo studente considera corrette. Il metodo restistuisce il punteggio raggiunto dallo studente per le risposte a quella domanda; il punteggio è calcolato come (N - FP - FN)/N dove:
•N è il numero di risposte totali per la domande,
•FP è il numero di risposte fornite dallo studente che non sono corrette per la domanda,
•FN è il numero di risposte corrette per la domanda che non sono state fornite dallo studente.

Il metodo totalScore() restituisce la somma dei punteggi per le risposte alle singole domande.

Il mio codice è, spero di formattarlo nel modo giusto sennò mi scuso




public class Assignment {

private String id;
private ExerciseChapter chapter;
List<Question> questions = new LinkedList<>();

public Assignment(String iD, ExerciseChapter chapter) {
// TODO Auto-generated constructor stub
this.id = iD;
this.chapter = chapter;
}

public String getID() {
return id;
}

public ExerciseChapter getChapter() {
return chapter;
}

public double addResponse(Question q,List<String> answers) {
q.addAssignment(answers);
double n = q.numAnswers();
double fp = answers.stream().count();
double fn = questions.stream().flatMap(f->f.getCorrectAnswers().stream()).count();
double res = (n - fp - fn) / n;
return res;
}

public double totalScore() {
return -1;
}

}




Quello che non capisco è cosa vuole il testo, sembra strano, ma non riesco a capire n, fp e fn.

Posto anche la classe Question in quanto sono correlate



public class Question {

private String question;
private Topic mainTopic;
HashSet<Answer> answers = new HashSet<>();
List<String> assignments = new LinkedList<>();

public Question(String question, Topic mainTopic) {
this.question = question;
this.mainTopic = mainTopic;
mainTopic.addQuestion(this);
}

public String getQuestion() {
return question;
}

public Topic getMainTopic() {
return mainTopic;
}

public void addAnswer(String answer, boolean correct) {
Answer a = new Answer(answer,correct);
answers.add(a);
}

@Override
public String toString() {
return getQuestion() + " (" + getMainTopic() + ")";
}

public long numAnswers() {
return answers.size();
}

public Set<String> getCorrectAnswers() {
return answers.stream().filter(f->f.getCorrect()).map(Answer::getAnswer).collect(toSet());
}

public Set<String> getIncorrectAnswers() {
return answers.stream().filter(f->!f.getCorrect()).map(Answer::getAnswer).collect(toSet());
}

public void addAssignment(List<String> answers2) {
// TODO Auto-generated method stub
assignments.addAll(answers2);
}
}

ingframin
02-10-2018, 12:53
Immagina che hai un compito con 20 domande.
Lo studente risponde a 10 domande correttamente, a 5 in modo sbagliato e 5 domande le salta.
Il punteggio finale è (20-5-5)/20 = 0.5.
Dove N = 20, Fp = 5 e Fn = 5.

Non riesco a capire il metodo addResponse(...).
Il metodo addResponse(Question, List<String>) aggiunge le risposte dello studente alla domanda data: la lista contiene le risposte che lo studente considera corrette. Il metodo restistuisce il punteggio raggiunto dallo studente per le risposte a quella domanda; il punteggio è calcolato come (N - FP - FN)/N dove:
•N è il numero di risposte totali per la domande,
•FP è il numero di risposte fornite dallo studente che non sono corrette per la domanda,
•FN è il numero di risposte corrette per la domanda che non sono state fornite dallo studente.
È proprio formulato male come esercizio, oppure manca un pezzo della traccia.