为什么我的2D数组不会返回true

时间:2015-04-19 10:02:43

标签: javascript multidimensional-array

以为我在这方面做得很好但是当检查除1,2等以外的值时,当我知道它应该返回true时,输出返回false。这里有很多“魔术方”的问题,但是我自己的学习,其他问题的许多答案对我来说太过先进了。

尝试了几种方法来编写我创建的这个3x3表,但找不到解决方案。如果它很简单,请原谅我的初学者问题。

修改了我的代码,但是当我知道它应该是假的时候返回TRUE。我已经将总和重置为零,因为循环迭代应该将各个行和列的总和与对角线进行比较。希望有人可以指出我正确的方向。

更新代码:

<p><input type="button" onClick="simpleSquare()" value="Enter a Positive 
Number"></p>
<!--create table here-->
<div id="squareTable">
<table id="magicSquare">
<tr>
<td><span id="cell00"></span>&nbsp;</td>
<td><span id="cell01"></span>&nbsp;</td>
<td><span id="cell02"></span>&nbsp;</td>
</tr><tr>
<td><span id="cell10"></span>&nbsp;</td>
<td><span id="cell11"></span>&nbsp;</td>
<td><span id="cell12"></span>&nbsp;</td>
</tr><tr>
<td><span id="cell20"></span>&nbsp;</td>
<td><span id="cell21"></span>&nbsp;</td>
<td><span id="cell22"></span>&nbsp;</td>
</tr><tr>
<td colspan="3" id="button"><p><input type="button"   
onclick="checkMagic()" value="Check if it is a magic Square"></p></td> 
</tr><tr>
<td id="output">Result:</td><td colspan="2" id="magic">&nbsp;</td></tr>

</table></div>

function simpleSquare() {
myArray = new Array([document.getElementById("cell00"), document.getElementById("cell01"),      
                    document.getElementById("cell02")], [document.getElementById("cell10"), document.
                    getElementById("cell11"), document.getElementById("cell12")],[document.getElementById("cell20"  
                    ), document.getElementById("cell21"), document.getElementById("cell22")]);
for(var rows = 0; rows < 3; rows++)
{
    for(var cols = 0; cols < 3; cols++)
    {
        var nums = parseInt(prompt("Enter a number for row " + (rows + 1) + ", column " + (cols + 1) + "."));
        myArray[rows][cols].innerHTML = nums;
    }
}

}

function checkMagic() {
var flag = true;
var flag = true;
var rowSum = 0;
var colSum = 0;

//get sum of diagonals in magic square
var sumDiag1 = parseInt(myArray[0][0].innerHTML) + parseInt(myArray[1]
[1].innerHTML) + parseInt(myArray[2][2].innerHTML);

var sumDiag2 = parseInt(myArray[2][0].innerHTML) + parseInt(myArray[1]
[1].innerHTML) + parseInt(myArray[0][2].innerHTML);
if(sumDiag1 != sumDiag2)
    flag = false;       
//sum of rows using for loop
for(j = 0; j < 3; j++)
{
    for(i = 0; i < 3; i++)
    {
        rowSum = rowSum + myArray[i][j];
        if((rowSum != sumDiag1) || (rowSum != colSum))
        flag == false;

    }
    rowSum = 0; //reset rowsum before each iteration
}
//sum of columns
for(i = 0; i < 3; i++)
{
    for(j = 0; j < 3; j++)
    {
        colSum = colSum + myArray[i][j];
        if((colSum != sumDiag1) || (colSum != rowSum))
        flag == false;
    }
    colSum = 0; //reset colsum before each iteration
        flag == false;
}

//output to user if magic square        
if(flag == false)
    document.getElementById("magic").innerHTML=("Sorry, your square is 
not a magic square");

if(flag == true)
    document.getElementById("magic").innerHTML=("Wow! This is a magic   

方“);

}

1 个答案:

答案 0 :(得分:1)

好吧......你的数组包含表格单元格,所以你应该总是用myArray[i][j].textContent(或者你喜欢的innerHTML)读取它们的值。这将解决一个问题。

接下来,它们的值是一个字符串。在获得输入时尝试转换没有意义,因为DOM中的文本总是字符串。因此,当您阅读时,您会得到一个字符串,并将+的语义更改为连接而不是添加。所以实际上你应该用+myArray[i][j].textContent阅读(使用+作为一元运算符转换为数字)。

最后,正如Barmar指出的那样,你应该分别检查每一行和每一行,而不是将它们全部加起来(即在第一个循环的每次迭代中将sum初始化为零,并且在迭代结束之前,与对角线和)。

相当混乱且效率低下的代码,但我们不在CodeReview上......