基本上,这是作业中的最后一个问题,我真的很茫然。 我需要创建一个交替的1和0的x×x矩阵,其中x是用户输入。 例如,如果用户输入2,矩阵看起来就像这样
0 1 1 0
如果用户输入4,则矩阵看起来像
0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 0
...等 我已经搜索了堆栈溢出和其他论坛,我理解如何创建一个数组。 它只是交替的1和0以及如何显示它。 感谢有任何想法的人。
答案 0 :(得分:2)
不要过于复杂化。您不需要标记或条件,例如bool
,if
和?:
。这非常简单。
var count = 4; // User specified matrix size
mat = []; // Empty array, to use as matrix.
for(var i=0; i<count; i++) {
mat.push(new Array(count)); // Add a new row (reserved size) to the matrix
for(var j=0; j<count; j++) {
mat[i][j] = (i^j) % 2; // Insert an alternating 1 or 0 based on iteration.
}
}
答案 1 :(得分:1)
您可以使用此功能:
function createArray(n) {
var arr = []; // create new array
var zeroStart = true; // the first row should start with 0
for (var i = 0; i < n; i++) { // loop over n times
arr[i] = []; // used because array is multidimensional
var zero = zeroStart; // starting zero should match the row start
for (var j = 0; j < n; j++) { // again loop over n times
arr[i][j] = zero ? 0 : 1; // if zero is true, assign 0; otherwise 1
zero = !zero; // negate the value of zero
}
zeroStart = !zeroStart; // negate the value of the starting zero
}
return arr; // return the created array
}
可以像这样调用:
createArray(6); // create 6x6 array
答案 2 :(得分:1)
秘诀是将代码抽象为多个函数。如果将用于创建行的代码与用于创建矩阵的代码分开,则可以更轻松地将思考器包裹起来,而不是将所有内容都塞入一个宏功能中。
让我们首先解决更容易的问题 - 创建一行。看起来您希望控制返回行的长度以及第一个单元格的初始值,无论是1还是0。这需要一个带有两个参数的函数:
function makeMatrixRow(size, initialValue) { }
所需的代码非常简单:
function makeMatrixRow(size, initialValue) {
var n = [];
for (var i = 0, flag = !!initialValue;
i < size;
i++, flag = !flag) {
n.push(0+flag+0);
}
return n;
}
我已将大部分逻辑推入for循环的定义中。解构不应该太难。唯一棘手的位是“!! initialValue”和“0 + flag + 0”。第一个将initialValue转换为true / false值(布尔值)。第二个将这个布尔值变回一个数字。显然我不需要在两侧加零,但我喜欢它的对称性 - 而且我觉得它看起来像杠铃这样:)
使用该功能可以轻松生成矩阵。没有摆弄嵌套循环。问题已经减少到简单的迭代来填充数组:
function makeMatrix(size) {
var matrix = [];
for (var i = 0; i < size; i++) {
matrix.push(makeMatrixRow(size, i % 2 == 0));
}
return matrix;
}
i%2 == 0正在测试均匀度。将其拆分为自己的变量赋值可能更好,而不是直接传递它。这里或那里的额外变量可以充分替代评论:
for (var i = 0; i < size; i++) {
var isEvenRow = (i % 2 == 0);
matrix.push(makeMatrixRow(size, isEvenRow));
}
就是这样!现在,这就是代码的样子:
function makeMatrixRow(size, initialValue) {
var n = [];
for (var i = 0, flag = !!initialValue;
i < size;
i++, flag = !flag) {
n.push(0+flag+0);
}
return n;
}
function makeMatrix(size) {
var matrix = [];
for (var i = 0; i < size; i++) {
matrix.push(makeMatrixRow(size, i % 2 == 0));
}
return matrix;
}
即使它更长一点,我更喜欢单一的功能解决方案......但是每个人都有自己的解决方案!
答案 3 :(得分:0)
function mArray(num){
var a = [];
var b = false;
for(var z=0; z<num; z++){
a[z] = [];
b = false;
for(var i=0; i<num; i++){
a[z][i] = (b)? 1: 0;
b = !b;
}
}
}
这应该有效。
mArray(4); // to create a 4x4 array