2016-11-28 1 views
0

Я пытаюсь получить ввод (который является числами) из динамической таблицы, в частности нижней части, строки «requirea». Here you can get a visual representation of what I'm talking about.Loop для получения данных из таблицы приводит к распределению внутри NaN внутри массива в javascript

И для этого я придумал код ниже меня, в нем z = 0 и x = 1 перед входом в цикл, а длина массива b [] - значение m (это связано с динамическая таблица). Проблема в том, что это приводит к NaN (что нежелательно), когда я вижу значения из console.log, что я не знаю, откуда он.

Вот полный Js код:

var inicio = function() { 
    var getDatos = function() { 
     var rows = parseInt($("#rows").val()); 
     var cols = parseInt($("#cols").val()); 
     rows = rows + 1; 
     cols = cols + 1; 
     var r1 = 1; 
     var numero = 1; 
     var num = 1; 
     var renglones = "<table class='centered bordered'><thead><tr><th data-field='no'></th>"; 
     while (rows >= r1) { 
      var c1 = cols; 
      var c2 = cols + 2; 
      if (r1 == 1) { 
       var letra = 65; 
       var valor = 2; 
       while (c1 > 0) { 
        if (c1 == 1) { 
         renglones = renglones.concat("<th data-field=titulo'" + valor + "'>Oferta</th>"); 
         c1--; 
        } 
        else { 
         renglones = renglones.concat("<th data-field=titulo'" + valor + "'>" + String.fromCharCode(letra) + "</th>"); 
         letra++; 
         valor++; 
         c1--; 
        } 
       } 
       renglones = renglones.concat("</tr></thead><tbody>"); 
      } 
      renglones = renglones.concat("<tr>"); 
      while (c2 > 0) { 

       if (c2 == (cols + 2)) { 

        if (r1 == rows) { 
         renglones = renglones.concat("<td>Demanda</td>"); 
         c2--; 
        } 
        else { 
         renglones = renglones.concat("<td>" + num + "</td>"); 
         num++; 
         c2--; 
        } 

       } 
       else if (c2 == 1) { 
        renglones = renglones.concat("</tr>"); 
        c2--; 
       } 

       else if (c2 == 2 && r1 == rows) { 
        renglones = renglones.concat("<td></td>"); 
        c2--; 
       } 

       else { 
        renglones = renglones.concat("<td><input id='caja" + numero + "' type='number' class='validate'></td>"); 
        c2--; 
        numero++; 
       } 

      } 
      if (r1 == rows) { 
       renglones = renglones.concat("</tbody> </table>"); 

      } 

      r1++; 
     } 
     renglones = renglones.concat("<div class='row'><div class='col s12 center'><a class='waves-effect waves-light btn ' id='btnAceptar'>Aceptar</a></div></div>"); 

     $("#divTabla").html(renglones); 
     $("#divTabla #btnAceptar").on("click", metodoEsn); 
    }; 

    var metodoEsn = function() { 
     var m = parseInt($("#rows").val());//renglones 
     var n = parseInt($("#cols").val());//columnas 
     var tp = new Array(m + 1); 
     var allo = new Array(m + 1); 
     var x = 1; 
     var z = 0; 
     var a = new Array(m + 1);//5 
     var b = new Array(n + 1); 
     //int tp[][]= new int[5][5]; 
     var k = 1, count = 0; 
     var tc = 0, mult = 1, sum = 0; 
     var i, j; 
     var c_sum = 0, d_sum = 0; 

     for (i = 1; i <= m; i++) { 
      //se crean las columnas de la tabla 
      tp[i] = new Array(n + 1); 
      console.log("se creo la columna numero " + i); 
     } 
     for (i = 1; i <= m; i++) { 
      allo[i] = new Array(n + 1); 
      console.log("se creo la columna numero " + i + "de allo"); 
     } 

     //Se ingresan los valores de la tabla 
     for (i = 1; i <= m; i++) { 
      for (j = 1; j <= n; j++) { 

       tp[i][j] = parseInt($("#caja" + x).val()); 
       allo[i][j] = 0; 
       console.log("se ingresa el valor de la caja " + i + " " + j); 
       x++; 
      } 
     } 
     x = 0; 

     //Ingresa Oferta 
     for (i = 1; i <= m; i++) { 
      x += n + 1; 
      a[i] = parseInt($("#caja" + x).val()); 
      c_sum += a[i]; 
      console.log("se ingresa la caja" + a[i]); 
     } 

     x = 1; 
     console.log("valor " + c_sum); 
     //Ingresa Demanda 
     console.log("se ingresa la demanda"); 

     for (i = 1; i <= n; i++) { 
      x += m + 2; 
      z++; 
      if (z == m) { 
       for (k = 1; k < n + 2; k++) { 
        x++; 
        b[k] = parseInt($("#caja" + x).val()); 
        d_sum += b[k]; 
        console.log("se ingresa el valor de la caja " + k); 
       } 
       break; 
      } 
     } 
     console.log("valor " + d_sum); 

     for (i = 1; i <= b.length; i++) { 
      console.log(b[i]); 
     } 

     console.log("se inician las cuentas de esn"); 

     if (c_sum == d_sum) { 
      for (i = 1; i <= m; i++) { 
       console.log("todo bien"); 
       for (j = k; j <= n; j++) { 
        console.log("todo bien x2"); 
        if (a[i] > b[j]) { 
         console.log("todo bien x3"); 
         mult = tp[i][j]; 
         mult = mult * b[j]; 
         allo[i][j] = b[j]; 
         a[i] = a[i] - b[j]; 
         sum += mult; 
         mult = 1; 
         count++; 
         console.log("por aqui todo bien"); 
         //k=1; 

        } else { 
         mult = tp[i][j]; 
         mult *= a[i]; 
         allo[i][j] = a[i]; 
         b[j] = b[j] - a[i]; 
         sum += mult; 
         mult = 1; 
         k = j; 
         count++; 
         console.log("por aqui tambien"); 
         break; 
        } 
       } 
      } 
      console.log("se termino de hacer el metodo"); 

      var tabla = "<table class='centered bordered'>"; 
      tabla = tabla.concat("<table> <tbody>"); 
      for (i = 1; i <= m; i++) { 
       tabla = tabla.concat("<tr>"); 
       for (j = 1; j <= n; j++) { 
        tabla = tabla.concat("<td>" + allo[j][i] + "</td>"); 

       } 
       tabla = tabla.concat("</tr>"); 
      } 
      tabla = tabla.concat("</tbody> </table>"); 

      $("#divTabla2").html(tabla); 
      console.log("se despliega la tabla"); 

      if ((m + n - 1) == count) 
       console.log("Z es igual a: " + sum); 
      else { 
       console.log("La solucion de este problema no se puede encontrar"); 
      } 


     } 

    }; 

    $("#btnCrear").on("click", getDatos); 

HTML код отвечал:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
<link type="text/css" rel="stylesheet" href="css/materialize.css"  media="screen,projection"/> 
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> 
<title>Problemas de transporte: Metodo Esquina Superior Noroeste.</title> 
</head> 
<body> 
<div class="container"> 
    <h5>Problemas de transporte: Metodo Esquina Superior Noroeste.</h5> 
    ESN? 
    <P>Primero que nada, que es el metodo de ESN?<br> El método de la esquina Noroeste es un algoritmo heurístico capaz de solucionar problemas de transporte o distribución mediante la consecución de una solución básica inicial que satisfaga todas las restricciones existentes sin que esto implique que se alcance el costo óptimo total. </p> 
     <br> 

     <h6>Calcular</h6> 
     <div class="input-field col s6"> 
      <input id="rows" type="number" class="validate"> 
      <label for="rows">Origenes</label> 
     </div> 
     <div class="input-field col s6"> 
      <input id="cols" type="number" class="validate"> 
      <label for="cols">Destinos</label> 
     </div> 
     <br> 
     <div class="row"> 
      <div class="col s12 center"><a class="waves-effect waves-light btn " id="btnCrear">Crear</a></div> 
     </div> 

</div> 
<div class="divider"></div> 
<div id="divTabla"></div> 
<div id="divTabla2"></div> 
    <script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script> 
    <script type="text/javascript" src="js/materialize.js"></script> 
    <script type="text/javascript" src="js/index.js"></script> 
</body> 
</html> 
+1

что использовать 'break;' здесь – Mahi

+0

Пожалуйста, разместите свой html-код – mean

+0

, добавьте его прямо сейчас. – Angelmartin11

ответ

0

(Опубликовано от имени О.П.).

Я исправил его, код по-прежнему получает сообщение об ошибке «Ошибка отображения типа« Uncaught »: невозможно прочитать свойство undefined 1» в строке 227, но я сам это выясню; если кто-то заинтересован, я изменил «для» петли для «а», как это:

//Ingresa Demanda 
      console.log("se ingresa la demanda"); 
      var tope=(1+n)*(1+m); 
      tope=tope-1; 
      while(x!=tope){ 
       x++ 
       if(x>=tope-(n-1)){ 
       z++; 
       b[z]=parseInt($("#caja"+x).val()); 
       d_sum+=b[z]; 
       } 
      } 
      console.log("valor"+d_sum); 

Похоже, проблема была петля, как кто-то сказал, поэтому я попытался изменить его.

Смежные вопросы