private void calculateActionPerformed(
      java.awt.event.ActionEvent evt) { // GEN-FIRST:event_calculateActionPerformed
    // TODO add your handling code here:
    DefaultTableModel dtm = (DefaultTableModel) jTResults.getModel();
    dtm.setRowCount(0);

    if (!KnnNo.getText().equals("")) {
      try {
        for (int i = 0; i <= Integer.parseInt(KnnNo.getText()); i++) {
          Results r = this.arrResFinal.get(i);
          Vector fila = new Vector();

          String code = "";

          ArrayList<Feature> arrFea = r.getCode();
          Iterator<Feature> itrFea = arrFea.iterator();
          while (itrFea.hasNext()) {
            code += itrFea.next().getFtr();
          }

          fila.add(code);
          fila.add(r.getAve());
          fila.add(r.getDist());
          fila.add(r.getCoffPro());

          dtm.addRow(fila);

          code = "";
        }
      } catch (Exception e) {
        JOptionPane.showMessageDialog(
            null, "Please enter a valid Number", "Error", JOptionPane.ERROR_MESSAGE);
      }

    } else {
      JOptionPane.showMessageDialog(
          null, "Please enter a Knn Neighbor(s)", "Error", JOptionPane.ERROR_MESSAGE);
    }
  } // GEN-LAST:event_calculateActionPerformed
  /** Creates new form NewJFrame */
  public FrmResult(ArrayList<DataReview> dataRvw) {
    this.dataRvw = dataRvw;
    ArrayList<Results> arrRes = new ArrayList<Results>();
    // ArrayList<Results> arrResFinal = new ArrayList<Results>();
    Results resLower = null;
    initComponents();

    Iterator<DataReview> itrDr = this.dataRvw.iterator();
    while (itrDr.hasNext()) {
      DataReview dr = itrDr.next();
      String code = dr.getCode();
      float ave = dr.getAverage();

      //  Data
      Results r = new Results();
      ArrayList<Feature> arrFea = new ArrayList<Feature>(); // Array de Features

      // System.out.println("code: "+code+" ave: "+ave);

      int limit = 1; // Cut String limite
      for (int i = 0; i < code.length() - 1; i++) {
        Feature f = new Feature();
        f.setFtr(Integer.parseInt(code.substring(i, limit)));
        limit += 1;

        arrFea.add(f);
      }

      r.setCode(arrFea);
      r.setAve(ave);

      arrRes.add(r);
    }

    //        Iterator<Results> itrRes = arrRes.iterator();
    //        while (itrRes.hasNext()){
    //            Results res = itrRes.next();
    //            ArrayList<Feature> arrFea2 = res.getCode();
    //            float ave = res.getAve();
    //
    //            System.out.print("ArrayFeatures: ");
    //            Iterator<Feature> itrFea = arrFea2.iterator();
    //            while (itrFea.hasNext()) {
    //                Feature f = itrFea.next();
    //                System.out.print(f.getFtr());
    //            }
    //            System.out.println(" Average: "+res.getAve());
    //        }

    resLower = arrRes.get(0); //  Take teh lower result to get the neighbors.

    Iterator<Results> itrRes = arrRes.iterator();
    while (itrRes.hasNext()) {
      Results res = itrRes.next();
      ArrayList<Feature> arrFeaRes = res.getCode();
      float ave = res.getAve();

      ArrayList<Feature> arrFeaRLower = resLower.getCode();

      int cont = 0;

      for (int i = 0; i < arrFeaRes.size(); i++) {
        if (arrFeaRes.get(i).getFtr() != arrFeaRLower.get(i).getFtr()) {
          // System.out.println("AR: "+arrFeaRes.get(i).getFtr()+" >>
          // "+arrFeaRLower.get(i).getFtr());
          cont += 1;
        }
      }

      // System.out.println("");

      //  Create de Result Final
      Results resFinal = new Results();
      resFinal.setCode(arrFeaRes);
      resFinal.setAve(ave);
      resFinal.setDist(cont);

      if (cont != 0) {
        this.arrResFinal.add(resFinal);
      }
    }

    System.out.println("<< RESULTS >>");
    System.out.print("Lower Node: ");
    Iterator<Feature> itrFeaResLow = resLower.getCode().iterator();
    while (itrFeaResLow.hasNext()) {
      System.out.print(itrFeaResLow.next().getFtr());
    }
    System.out.println("");

    Iterator<Results> itrResFinal = this.arrResFinal.iterator();
    while (itrResFinal.hasNext()) {
      Results r = itrResFinal.next();
      ArrayList<Feature> arrFea = r.getCode();
      float ave = r.getAve();
      int dist = r.getDist();

      System.out.print("Features: ");
      Iterator<Feature> itrArrFea = arrFea.iterator();
      while (itrArrFea.hasNext()) {
        Feature f = itrArrFea.next();
        System.out.print(f.getFtr());
      }
      System.out.println(" Average: " + ave + " Distance: " + dist);
    }

    //  take the first object DataReview cause it's lower.
    for (int i = 0; i < 1; i++) {
      DataReview dr = this.dataRvw.get(i);
      KnnId.setText(dr.getCode());
      KnnAve.setText(String.valueOf(dr.getAverage()));
    }
  }