[RESOLVIDO] Achando diferenças em Lists

6 respostas
fejohann

Ola, Estou fazendo um Questionário, desenvolvendo agora uma ação que imprime a “próxima questão”, tenho então 2 listas, e preciso saber “até onde o respondedor” já respondeu.

Uma Lista contém todas as perguntas, e outra Lista contém todas as Respostas já efetuadas (contendo o codigo da pergunta).

tentei alinhar for e não estou conseguindo…

Eu imprimo questão por questão na tela, o cara responde e avança/salva, e ele chama a função novamente…

for(i=0; i>lista_pergunta.size();i++){
     for(a=0;a>lista_respostas.size();a++){
          if (lista_pergunta.get(i).getPer_Cod == lista_respostas.get(a).getPer_Cod){

E dai em diante não estou conseguindo fazer…

Não sei exatamente se me entenderam, mas a partir desses for’s eu precisaria que ele achasse a proxima pergunta não respondida…

Aguardo!

6 Respostas

regis_hideki

Acho que seria melhor criar uma classe, por exemplo, “Questao”. Nessa classe, teria os atributos “pergunta” e “resposta” dos tipos que você já definiu; e “respondida” do tipo boolean.

ficaria mais ou menos assim:

//definicao da lista:
List<Questao> questoes = new ArrayList<Questao>();
//... restante do código para popular a lista

//faz alguma coisa com as que nao foram respondidas
for(Questao questao: questoes){
    if(!questao.getRespondida()){

    ...

    }
}
gabrielfrios

Uma ideia seria usar Map

fejohann

Não posso usar boolean Respondida, pois o Respondedor pode responder varias vezes o questionário…

regis_hideki

Mas há algum tratamento diferente para quando responde uma ou várias vezes?

regis_hideki

Usando código para linkar as relações, você parece estar trabalhando com modelo relacional (primary key e foreign key). No código, acho mais fácil trabalhar com agregação/composição:

class Resposta{
     String resposta;
}

class Questao{
    String pergunta;
    List<Resposta> respostas;
}

Esse foi só um exemplo de como linkar objetos sem precisar de um identificador, basta adaptar para a sua situação.

Para verificar quantas respostas foram dadas para cada questão, pega o respostas.size().

fejohann

Na verdade existe um campo chamado versão…

mas, já consegui fazer, meio engembrado, mas deu certo!

Eis a solução!

for(int i=0; i<pergunta.size(); i++){
                      
            for(int a=0; a<respostas.size(); a++){
                          
                if(pergunta.get(i).getPer_cod() == respostas.get(a).getPergunta().getPer_cod()){ //Se for igual pulo a pergunta
                              break;
                }
                
                if(a+1==respostas.size()){
//nesse ponto se der positivo, quer dizer que verificou todas as respostas feitas, e então imprime...
}
}
}

Obrigado a todos

Criado 10 de maio de 2012
Ultima resposta 11 de mai. de 2012
Respostas 6
Participantes 3