我正在尝试为最大的子阵列问题创建一个在线求解器。 https://en.wikipedia.org/wiki/Maximum_subarray_problem
我计划从文本框中获取用户输入的数字并将它们转换为JS中的int数组,但是我的JS似乎根本没有运行。 这是我的HTML
<!DOCTYPE html>
<html>
<head>
<title> findMaxSum </title>
<script src="findMaxSum.js" type="text/javascript"></script>
</head>
<body>
<h1> findMaxSum </h1>
<form id="formarray" action="">
<p> Enter numbers with spaces, i.e. "1 2 3 4 5": </p>
<input type="text" id="array"> <br>
<button id="sum">findMaxSum!</button>
<br>
</form>
<p id="answer">The answer is: </p>
</body>
</html>
和我的JS。注意:代码的map(function(item))部分旨在将字符串从表单拆分为int数组。
"use strict";
function findMaxSum() {
var array = document.getElementById("array").split(" ").map(function(item) {
return parseInt(item, 10);
});
var sumButton = document.getElementById("sum");
sumButton.onclick = findMaxSum;
var loopSum = 0;
var currentMax = 0;
for (var i = 0; i < array.length; i++) {
loopSum += array[i];
if (currentMax < loopSum) {
currentMax = loopSum;
} else if (loopSum < 0) {
loopSum = 0;
}
}
document.getElementById("answer").innerHTML = "The answer is: " + currentMax;
}
window.onload = findMaxSum;
目前,当我在文本框中输入数字并提交时,数字会消失并且没有任何反应。非常感谢任何帮助。
答案 0 :(得分:1)
问题是你在表单中使用了按钮,默认情况下是类型submit
类型,这就是为什么页面变为空白,它被提交的原因。因此,要么您不使用表单标记,要么将按钮设置为按钮类型。
<button id="sum" type='button'>findMaxSum!</button> <!-- type attribute added -->
以下是示例更新代码,希望对您有所帮助。
"use strict";
function findMaxSum() {
var array = document.getElementById("array").value.split(/\s/);
var max = Math.max.apply(Math, array);
document.getElementById("answer").innerHTML = "The answer is: " + max;
}
window.onload = function() {
document.getElementById("sum").onclick = findMaxSum;
};
&#13;
<h1> findMaxSum </h1>
<form id="formarray" action="">
<p>Enter numbers with spaces, i.e. "1 2 3 4 5":</p>
<input type="text" id="array">
<br>
<button id="sum" type='button'>findMaxSum!</button>
<br>
</form>
<p id="answer">The answer is:</p>
&#13;
答案 1 :(得分:1)
更改您的代码 -
test.$watch('varFromRequest', function(new_value, old){
$scope.varFromRequest = test.varFromRequest;
})
答案 2 :(得分:1)
您的array
变量为object
。您必须将<input type="text" id="array">
的值拆分为对象元素。
var array = document.getElementById("array");
array = array.value.split(" ").map(function (item) {
return parseInt(item, 10);
});
或更简单:
var array = document.getElementById("array").value.split(" ").map(function (item) {
return parseInt(item, 10);
});
答案 3 :(得分:0)
要实现问题的解决方案,您需要进行以下更改。
更新事件绑定位置
window.onload = function() {
var sumButton = document.getElementById("sum");
sumButton.onclick = findMaxSum;
};
function findMaxSum() {
// remove the update binding code from here
// logic should come here
}
解决JS错误
document.getElementById("array").value.split(" ")
更新html以避免页面刷新(添加类型)
<button id="sum" type='button'>findMaxSum!</button>
更新解决问题的逻辑
var currentMax = 0;
for (var i = 0; i < array.length; i++) {
var counter = i+1;
while (counter < array.length) {
var loopSum = array[i];
for (var j = (i+1); j <= counter; j++) {
loopSum += array[j];
if(loopSum > currentMax) {
currentMax = loopSum;
}
}
counter++;
}
}
这是一个吸虫 - http://plnkr.co/edit/AoPANUgKY5gbYYWUT1KJ?p=preview