我使用Javascript和HTML制作了一个二次方程式求解器,但是当我单击“计算”按钮时,它只获取了“ a”和“ c”值,然后乘以-1。

我是Java语言的初学者,所以我不太了解对象。

这是代码:



var a, b, c, xone, xtwo;

function getValues() {
  function getValues() {
    if (document.getElementById('signone').value == "+") {
      a = document.getElementById('vara').value;
    } else {
      a = document.getElementById('vara').value * (-1);
    }
    if (document.getElementById('signtwo').value == "+") {
      b = document.getElementById('varb').value;
    } else {
      b = document.getElementById('varb').value * (-1);
    }
    if (document.getElementById('signthree').value == "+") {
      c = document.getElementById('varc').value;
    } else {
      c = document.getElementById('varc').value * (-1);
    }
  }
}

function getSolution() {
  xone = ((-1 * b) + Math.sqrt((b * b) - 4 * a * c)) / (2 * a);
  xtwo = ((-1 * b) - Math.sqrt((b * b) - 4 * a * c)) / (2 * a);
}

function showSolution() {
  document.getElementById('showone').innerHTML = "x1 = " + xone;
  document.getElementById('showtwo').innerHTML = "x2 = " + xtwo;
}

 <h1> Quadratic equation calculator </h1>
<p>This calculator is going to find the two values of <i>x</i> of the equation typed.</br>In order to use it properly, you have to fill all of the boxes</br>
  and click <q>ok</q>
</p>
</br>
<form>
  <select id="signone">
    <option value="+">+</option>
    <option value="-">-</option>
  </select>
  <input id="vara" type="text" name="firstvar" placeholder="type the coeficient a" />x2
  <select id="signtwo">
    <option value="+">+</option>
    <option value="-">-</option>
  </select>
  <input id="varb" type="text" name="secondvar" placeholder="type the coeficient b " />x
  <select id="signthree">
    <option value="+">+</option>
    <option value="-">-</option>
  </select>
  <input id="varc" type="text" name="thirdvar" placeholder="type the coeficient c" />=0
</form>
</br>
<button type="button" onclick="getValues();getSolution();showSolution();">Calculate</button>
<p id="showone">X1 =</p>
</br>
<p id="showtwo">X2 =</p>

最佳答案

从文本输入中获取值时,该值是字符串,而不是Javascript中的数字。这就是为什么每次对其执行操作都会导致NaN的原因。例如,正在发生的是'3'* -1,这会导致NaN,因为'3'不是数字。 3是数字,但'3'(作为字符串)不是。

有一个简单的解决方案。您可以使用parseInt()将字符串值转换为整数。但是,如果输入十进制数字,最好使用parseFloat。例如,正确的代码如下所示:

a = parseFloat(document.getElementById('vara').value) * (-1)


在许多情况下,您还会违反DRP规则,“不要重复自己”,因为您的代码具有很高的重复性,并且可以通过迭代循环更轻松地进行分解。每当您拥有一堆“ if”语句时,通常可以将其分解为一个循环。我会给你这样做的挑战。

如下所述(我错过了),您还具有两次功能,这是一个问题。

09-16 10:37