Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Баг при выполнении цикла в js

artur petrosyan Ученик (101), на голосовании 1 год назад
добрый день у меня возник такой баг:
Мне нужно сгенерировать массив в котором будут еще массивы а в них рандомные числа количество которых должно быть ровно количеству массивов в главном массиве (что то в роде матрицы) количество чисел и массивов даем с помощью prompt а после чего отобразить этот массив в консоли, потом сделать дубликат этого массива и в дубликате стереть числа по обоим диагоналям и так же отобразить в консоли
 var x = prompt("mutqagreq matrici erkarutyuny", 5); 
var arr = [];
for(let i = 0; i < x; i++){
arr[i] = [];
for(let j = 0; j < x; j++){
arr[i][j] = Math.floor(Math.random() * (20 - 0) + 0);
}
}
console.log(arr);

console.log("------------------------------------");

var array = arr;

for(let g = 0; g < x; g++){
for(let l = 0; l < x; l++){
if(g == l){
array[g][l] = " ";
array[g][(x-1)-l] = " ";
}
}
}

console.log(array)
проблема в том что первый массив отображается не корректно (точнее при выполнении второй части стираются диагонали не у второго массива а у обоих)
пожалуйста помогите понять почему так получается
Голосование за лучший ответ
Яков Гото Искусственный Интеллект (320909) 1 год назад
Ну вообще, у тебя во второй раз зачем-то используется два цикла... это приводит к тому, что итерируется не только первый уровень, но и второй, что здесь ни к чему.

Тебе нужно просто создать переменную буфер равную 0 и на каждой итерации по родительскому массиву прибавлять +1... эта переменная будет индексом при удалении или замене элементов по диагонали. Что-то вроде такого, если я правильно понял.

 const rand = () => Math.floor(Math.random() * (99 - 1 + 1) + 1); 

let count = +prompt('Введите количество чисел:');
let matrix = [];
let index = 0;

for (let a = 0; a < count; a++) {
for (let b = 0; b < count; b++) {
if (matrix[a]) matrix[a].push(rand());
else matrix.push([rand()]);
}
}

for (let k of matrix) {
delete k[index];
index += 1;
}

console.log(matrix);
Яков ГотоИскусственный Интеллект (320909) 1 год назад
 for (let a = 0; a < count; a++) { 
for (let b = 0; b < count; b++) {
b === 0 && matrix.push([]);
matrix[a].push(rand());
b === index && delete matrix[b][index];
}
index++;
}
Похожие вопросы