逻辑门和真值表

时间:2017-03-13 15:44:35

标签: javascript html

我一直在研究这个问题,但我不知道为什么它不能正常工作。似乎无论我在输入框中放入什么值,它都会带来相同的值,而不是根据真值或假值来改变。它应该遵循带有AND,OR和XOR语句的真值表规则。我还没有完成任何XOR代码,因为我想首先解决这个问题。任何想法为什么它不断给我相同的输出?



var binary = document.getElementById("binary").value;
var binarytwo = document.getElementById("binarytwo").value;

function truefalse(){
  if (binary == 1 && binarytwo == 1){
    document.getElementById("and").innerHTML = "1 or TRUE"
  }else{
    document.getElementById("and").innerHTML = "0 or FALSE"
  }

  if (binary == 1 || binarytwo == 1){
      document.getElementById("or").innerHTML = "1 or TRUE"
  }else if (binary == 1 || binarytwo == 0){
      document.getElementById("or").innerHTML = "1 or TRUE"
  }else if (binary == 0 || binarytwo == 1){
      document.getElementById("or").innerHTML = "1 or TRUE"
  }else{
    document.getElementById("or").innerHTML = "0 or FALSE"
  }
}

<!DOCTYPE html>
<html>
<head>
<h1>Logic Gates</h1>
<br>
</head>
<body>
<h1>Write two Binary Values</h1>
<br>
  <input id = "binary">Type a 0 or 1 here
  <br>
  <input id = "binarytwo">Type a 0 or 1 here
  <br>
  <button onclick = "truefalse()">"Click Here to get the Statements"</button>
  <p id="or">OR Statement</p>
  <p id="and">AND Statement</p>
  <p id="xor">XOR Statement</p>
  </body>
</html>
&#13;
&#13;
&#13;

3 个答案:

答案 0 :(得分:2)

除了正确观察到您只使用初始输入外,您的逻辑也不正确。

“OR”字段始终为“1或TRUE”。 请记住,使用javascript OR,两个管道:|| 只检查第一部分是否为真。

您的代码:

if (binary == 1 || binarytwo == 1){
      document.getElementById("or").innerHTML = "1 or TRUE"
  }else if (binary == 1 || binarytwo == 0){
      document.getElementById("or").innerHTML = "1 or TRUE"
  }else if (binary == 0 || binarytwo == 1){
      document.getElementById("or").innerHTML = "1 or TRUE"
  }

看看这里发生了什么。我们假设二进制等于1: if (binary == 1 || binarytwo == 1) {是真的,因为binary == 1,其余的被跳过。所以永远不会执行else if (binary == 1 || binarytwo == 0){

如果binary = 0,那么前3个将永远不会执行,只会检查}else if (binary == 0 || binarytwo == 1){。这将始终成功,当它被触发时,sicne二进制文件始终为0。检查binarytwo == 1永远不会发生,因为||已经成功binary == 0

所以你更需要这样的逻辑:

if (binary == 1 && binarytwo == 1) console.log('both are TRUE: AND');
else if (binary == 1 || binarytwo == 1) console.log('one is true: OR');
else console.log('both are FALSE');

如果你们两个都是假的话,你也要说'和',你可以把最后的else折叠成第一个:

if ( (binary == 1 && binarytwo == 1) || (binary == 0 && binarytwo == 0) ) console.log('AND');
else console.log('OR');

答案 1 :(得分:1)

您只获得一次值。当您调用该功能时,您不会再次获得实际值。只需将getElementById值移动到该函数即可。 你也不包括xor部分。 这是完整的事情:

&#13;
&#13;
function truefalse(){
var binary = document.getElementById("binary").value;
var binarytwo = document.getElementById("binarytwo").value;
  if (binary == 1 && binarytwo == 1){
    document.getElementById("and").innerHTML = "1 or TRUE"
  }else{
    document.getElementById("and").innerHTML = "0 or FALSE"
  }

  if (binary == 1 || binarytwo == 1){
      document.getElementById("or").innerHTML = "1 or TRUE"
  }else if (binary == 1 || binarytwo == 0){
      document.getElementById("or").innerHTML = "1 or TRUE"
  }else if (binary == 0 || binarytwo == 1){
      document.getElementById("or").innerHTML = "1 or TRUE"
  }else{
    document.getElementById("or").innerHTML = "0 or FALSE"
  }

  if (binary == 1 && binarytwo == 1){
      document.getElementById("xor").innerHTML = "0 or FALSE"
  }else if (binary == 1 && binarytwo == 0){
      document.getElementById("xor").innerHTML = "1 or TRUE"
  }else if (binary == 0 && binarytwo == 1){
      document.getElementById("or").innerHTML = "1 or TRUE"
  }else{
    document.getElementById("xor").innerHTML = "0 or FALSE"
  }
}
&#13;
<!DOCTYPE html>
<html>
<head>
<h1>Logic Gates</h1>
<br>
</head>
<body>
<h1>Write two Binary Values</h1>
<br>
  <input id = "binary">Type a 0 or 1 here
  <br>
  <input id = "binarytwo">Type a 0 or 1 here
  <br>
  <button onclick = "truefalse()">"Click Here to get the Statements"</button>
  <p id="or">OR Statement</p>
  <p id="and">AND Statement</p>
  <p id="xor">XOR Statement</p>
  </body>
</html>
&#13;
&#13;
&#13;

但你可以使这段代码更加简单:

function truefalse() {
  var binary = Number(document.getElementById("binary").value);
  var binarytwo = Number(document.getElementById("binarytwo").value);

  document.getElementById("and").innerHTML = !! (binary && binarytwo);
  document.getElementById("or").innerHTML =  !! (binary || binarytwo);
  document.getElementById("xor").innerHTML = !! ( ( binary && !binarytwo ) || ( !binary && binarytwo ) );
}

在此处查看:https://jsfiddle.net/b9wf977v/4/

!!是一个简单的javascript&#34;技巧&#34;将数值转换为布尔值。

答案 2 :(得分:1)

您无法更改二进制代码。 现在你的二进制值的作用域是在外面的,只是在程序初始化时才会被打开,但是当你按下按钮时,这些值永远不会改变。

您需要将它们移动到函数中,以便在调用函数时二进制值反映表单中的值。

您的代码中会发生什么:

  • 读取表单值(空)
  • 将表单值分配给二进制变量(空)

  • 按钮

  • 计算(空为空)
  • 显示结果

  • 按钮

  • 计算(空为空)
  • 显示结果

以下代码中会发生以下情况:

  • 按钮
  • 阅读表格值
  • 将表单值分配给二进制变量(值,值)
  • 计算(价值,价值=某事)
  • 显示结果

  • 按钮

  • 阅读表格值
  • 将表单值分配给二进制变量(值,值)
  • 计算(价值,价值=某事)
  • 显示结果

&#13;
&#13;
function truefalse(){

  //Inside the function loop

  var binary = document.getElementById("binary").value;
  var binarytwo = document.getElementById("binarytwo").value;

  if (binary == 1 && binarytwo == 1){
    document.getElementById("and").innerHTML = "1 or TRUE"
  }else{
    document.getElementById("and").innerHTML = "0 or FALSE"
  }

  if (binary == 1 || binarytwo == 1){
      document.getElementById("or").innerHTML = "1 or TRUE"
  }else if (binary == 1 || binarytwo == 0){
      document.getElementById("or").innerHTML = "1 or TRUE"
  }else if (binary == 0 || binarytwo == 1){
      document.getElementById("or").innerHTML = "1 or TRUE"
  }else{
    document.getElementById("or").innerHTML = "0 or FALSE"
  }
}
&#13;
<!DOCTYPE html>
<html>
<head>
<h1>Logic Gates</h1>
<br>
</head>
<body>
<h1>Write two Binary Values</h1>
<br>
  <input id = "binary">Type a 0 or 1 here
  <br>
  <input id = "binarytwo">Type a 0 or 1 here
  <br>
  <button onclick = "truefalse()">"Click Here to get the Statements"</button>
  <p id="or">OR Statement</p>
  <p id="and">AND Statement</p>
  <p id="xor">XOR Statement</p>
  </body>
</html>
&#13;
&#13;
&#13;