【问题标题】:For loop not running through lengthFor 循环未通过长度
【发布时间】:2019-08-04 19:22:24
【问题描述】:

我无法弄清楚我做错了什么导致我的 for 循环无法通过我的长度。我正在尝试使用用户输入将二进制转换为十进制,但它不起作用。我有的是

已编辑

var val = $("txtIn").value;
if (cT[1].checked) {
  var bVal = val;
  if (isNaN(bVal)) {
    alert(val + " is not a number. A number is required to run the program.");
  } else if ((val % 1) !== 0) {
    alert(val + " is not an integer. A whole number is required to run the program.");
  } else if (bVal < 0) {
    alert(val + " is not able to convert. Input must be positive integer.");
  } else {
    convertByArrayB(bVal);
  }
  }
  
  function convertByArrayB(bVal) {
    var r, i, j;

    for (i = 0; i < bVal.length; i++) {
      r = bVal.charAt(i);
      if (r !== '1' && r !== '0') {
        alert("You did not enter a valid binary number. Please try again!");
      }

      var nv = parseInt(r, 2);
      
    }

    $("txtOut").value = nv;

  }

我认为您不需要顶部部分,但安全总比抱歉好。预先感谢您的任何帮助。 (爱这个社区顺便说一句)

【问题讨论】:

  • 请修正您的代码。 JavaScript 字符串中不能有换行符。
  • 您正在循环内重新分配bVal = nv
  • 之后,bVal.length 未定义。
  • 你的牙套不平衡。第一个if 没有}
  • r[i] 应该是什么? rbVal 的当前字符。

标签: javascript binary decimal converters


【解决方案1】:

当你这样做时,你正在循环内更改bVal

bVal = nv;

所以bVal.length 的值在下一次迭代中为undefined,循环停止。

调用parseInt() 的代码应该在循环之后,而不是在循环内部。无需重新分配bVal,它应该解析bVal,而不是r[i]

function convertByArrayB(bVal) {
  var r, i, j;

  for (i = 0; i < bVal.length; i++) {
    r = bVal.charAt(i);
    if (r !== '1' && r !== '0') {
      alert("You did not enter a valid binary number. Please try again!");
      return;
    }
  }
  var nv = parseInt(bVal, 2);

  document.getElementById("txtOut").value = nv;

}

convertByArrayB("101");
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Result: <input id="txtOut">

【讨论】:

  • 天哪,谢谢!所以基本上我把它弄糊涂了,而且我的公式也放错了地方。再次感谢巴尔玛!你是最棒的!
猜你喜欢
  • 1970-01-01
  • 2020-05-24
  • 2013-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多