我尝试使用下面的代码将十进制输入转换为二进制表示,然后计算其中的1的数量
当我运行以下代码时,没有输出,也没有报告错误:
function demo() {
var arra, i, rem;
var Input = document.getElementById('demo');
arra = [
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
var x = 1;
while (Input > 0) {
rem = Input % 2;
Input = (parseInt(Input / 2));
if (rem > 0) {
arra[i] = 1;
i = i + 1;
} else {
i = i + 1;
}
}
while (x < 35) {
if (arra[x] == 1) {
document.getElementById("output").innerHTML = "SOB Found";
x = x + 1;
} else {
x = x + 1;
}
}
}
HTML代码:
<!doctype html>
<html>
<head>
<title>Test Phase</title>
<script src="SOB.js" type="text/javascript"></script>
</head>
<body>
<input type="text" name="value" id="Input" />
<input type="submit" value="submit" onClick="demo()" />
<p id="output"> </p>
<script src="SOB.js" type="text/javascript"></script>
</body>
</html>
答案 0 :(得分:0)
您的代码存在一些问题。 var Input
你拥有它的方式是一个DOM元素,它实际上并不存在(demo
)在你的HTML中,你可能想做var Input = document.getElementById('Input').value;
接下来,您没有给i
一个初始值,这使得第一个arra[i]
undefined: 1
(或当时的任何值Input
。
第三,Array
从索引0
开始,因此var x
应为0
。
要把它们放在一起,它应该是:
function demo() {
var arra, i = 0, rem;
// ^ giving i initial value
var Input = document.getElementById('Input').value;
// ^ ^
arra = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
var x = 0; // start index is 0
while (Input > 0) {
rem = Input % 2;
Input = (parseInt(Input / 2));
if (rem > 0) {
arra[i] = 1;
i = i + 1;
} else {
i = i + 1;
}
}
while (x < 35) {
if (arra[x] == 1) {
document.getElementById("output").innerHTML = "SOB Found";
x = x + 1;
} else {
x = x + 1;
}
}
}
这很有效,虽然我不明白其含义是什么。
答案 1 :(得分:0)
您可以使用空数组,使用输入的隐式转换数字值,使用所有小写字母变量并计算数组中的所有1
。然后用计数输出。
function demo() {
var array = [], i = 0, rem,
input = +document.getElementById('Input').value,
count = 0;
while (input > 0) {
rem = input % 2;
input = Math.floor(input / 2);
array[i] = rem;
i++;
}
for (i = 0; i < array.length; i++) {
if (array[i] == 1) {
count++;
}
}
document.getElementById("output").innerHTML = count + ' found of 1.';
console.log(array);
}
&#13;
<input type="text" name="value" id="Input" />
<input type="submit" value="submit" onClick="demo()" />
<p id="output"></p>
&#13;
答案 2 :(得分:0)
有几个问题,但您可以使用.toString(2)
方法以更少的代码执行此操作:
function demo() {
// Get input value via value property and convert to number (+)
var val = +document.getElementById("input").value;
// Convert to binary representation:
var bin = val.toString(2);
// Count the number of 1 bits, by counting the number of
// matches when looking for 1s:
var ones = bin.match(/1/g).length;
// Output results, using textContent, not innerHTML:
document.getElementById("binary").textContent = bin;
document.getElementById("ones").textContent = ones;
}
<input type="text" name="value" id="input">
<input type="submit" value="submit" onclick="demo()">
<p>
Binary: <span id="binary"></span><br>
One bits: <span id="ones"></span>
</p>