public Object[][] crearMatrizRespuestas() {
   boolean blnAnulada;
   for (int j = 0; j < colResoluciones.size(); j++) {
     Resolucion resolucion = colResoluciones.get(j);
     matResultados[j][0] = resolucion.getAlumno().toString();
     matResultados[j][1] = String.format("%.2f", resolucion.getPorcentajeAprobacion()) + "%";
     blnAnulada = resolucion.isBlnAnulada();
     for (int i = 0; i < resolucion.getColRespuestas().size(); i++) {
       Respuesta respuesta = resolucion.getColRespuestas().get(i);
       if (blnAnulada) {
         matResultados[j][i + 2] = "Anulada";
       } else {
         int esCorrecta = respuesta.esCorrecta();
         // Datos para filtros de tema
         switch (esCorrecta) {
           case 2: // Contestó bien la pregunta
             matResultados[j][i + 2] = "Incompleta";
             break;
           case 1: // Contestó bien la pregunta
             matResultados[j][i + 2] = "Correcta";
             break;
           case 0: // Contestó mal
             matResultados[j][i + 2] = "Incorrecta";
             break;
           case -1: // No es corrección automática
             matResultados[j][i + 2] = "Sin calificar";
             break;
         }
       }
     }
   }
   return matResultados;
 }
  private void procesarResoluciones() {

    this.lstPorcentajeCalificaciones = new ArrayList<>();
    this.lstTemas = new ArrayList<>();
    this.lstDificultad = new ArrayList<>();
    this.lstPreguntas = new ArrayList<>();
    intTotalResoluciones = 0;
    intTotalAprobados = 0;
    intTotalAnulados = 0;
    intTotalRespuestas = 0;
    intTotalNoCorregidos = 0;

    for (Resolucion resolucion : colResoluciones) {
      try {

        if (resolucion.isBlnAnulada()) {
          intTotalAnulados++;
          continue;
        }

        if (!resolucion.esCorreccionCompleta()) {
          intTotalNoCorregidos++;
          continue;
        }

        boolean esAprobada = resolucion.estaAprobada();

        if ((esProcesarSoloAprobadas && !esAprobada)
            || (esProcesarSoloDesaprobadas && esAprobada)) {
          continue;
        }

        intTotalResoluciones++;

        lstPorcentajeCalificaciones.add(resolucion.getPorcentajeAprobacion());

        if (esAprobada) {
          intTotalAprobados++;
        }

        for (Respuesta respuesta : resolucion.getColRespuestas()) {

          intTotalRespuestas++;

          Categoria pregunta = new Categoria(respuesta.getPregunta().getStrEnunciado());
          int indexPregunta = lstPreguntas.indexOf(pregunta);
          if (indexPregunta != -1) {
            pregunta = lstPreguntas.get(indexPregunta);
          } else {
            lstPreguntas.add(pregunta);
          }

          Categoria tema = null;
          if (respuesta.getPregunta().getTema() != null
              && respuesta.getPregunta().getTema().getIntTemaId() > 0) {
            tema = new Categoria(respuesta.getPregunta().getTema().getStrNombre());
            int indexTema = lstTemas.indexOf(tema);
            if (indexTema != -1) {
              tema = lstTemas.get(indexTema);
            } else {
              lstTemas.add(tema);
            }
          }

          Categoria dificultad = new Categoria(respuesta.getPregunta().getStrNivel());
          int indexDificultad = lstDificultad.indexOf(dificultad);
          if (indexDificultad != -1) {
            dificultad = lstDificultad.get(indexDificultad);
          } else {
            lstDificultad.add(dificultad);
          }

          if (!respuesta.fueRespondida()) {
            if (tema != null) tema.cantNoRespondidas++;
            dificultad.cantNoRespondidas++;
            pregunta.cantNoRespondidas++;
            continue;
          }

          int esCorrecta = respuesta.esCorrecta();
          // Datos para filtros de tema
          switch (esCorrecta) {
            case 1: // Contestó bien la pregunta
              if (tema != null) tema.cantCorrectas++;
              dificultad.cantCorrectas++;
              pregunta.cantCorrectas++;
              break;
            case 0: // Contestó mal
              if (tema != null) tema.cantIncorrectas++;
              dificultad.cantIncorrectas++;
              pregunta.cantIncorrectas++;
              break;
            case 2: // Pregunta de desarrollo incompleta
              if (tema != null) tema.cantIncompletas++;
              dificultad.cantIncompletas++;
              pregunta.cantIncompletas++;
              break;
          }
        }
      } catch (Exception ex) {
        ex.printStackTrace();
        System.err.println(ex.getMessage());
      }
    }
  }