我一直在研究这个问题,但我不知道为什么它不能正常工作。似乎无论我在输入框中放入什么值,它都会带来相同的值,而不是根据真值或假值来改变。它应该遵循带有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;
答案 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部分。 这是完整的事情:
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;
但你可以使这段代码更加简单:
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)
您无法更改二进制代码。 现在你的二进制值的作用域是在外面的,只是在程序初始化时才会被打开,但是当你按下按钮时,这些值永远不会改变。
您需要将它们移动到函数中,以便在调用函数时二进制值反映表单中的值。
您的代码中会发生什么:
将表单值分配给二进制变量(空)
按钮
显示结果
按钮
以下代码中会发生以下情况:
显示结果
按钮
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;