2016-05-22 2 views
-2

Прошу прощения за то, что я был нобом, но я думаю, что я нахожусь в нужном месте. Я пытался решить шахматную доску красноречивым яваскрипта, но это так трудно для меня, даже решение при условии:Правильное решение для шахматной доски для JavaScript?

var size = 8; 
var board = ""; 
for (var y = 0; y < size; y++) { /* why 2 loops? */ 
for (var x = 0; x < size; x++) { 
    if ((x + y) % 2 == 0) /* why is this? */  
    board += " "; 
else  
    board += "#"; 
    } 
board += "\n"; 
} 
console.log(board); 

Может кто-то пожалуйста, объясните линии дальше, я не хочу, чтобы передать эту проблему без полного понимания . Также, эта книга также является хорошим началом для javascript?

+1

2 петли для 2-х измерений. '%' - оператор остатка/по модулю. он возвращает остаток целочисленного деления. –

+0

if ((x + y)% 2 == 0)/* Почему это? */...% - оператор mod, он проверяет, является ли результат четным числом. Две петли - это потому, что у вас есть доска, которая двумерна. – dinotom

+0

Мне интересно, почему # не отображается на четном номере в разных строках? –

ответ

2

Две петли необходимы для построения двух размеров платы. Посмотрите:

Chess Board

Вы можете думать о внешнем цикле в качестве строк (числа на борту) и внутреннего контура, как и столбцы (алфавита на доске). Каждый цикл внешних циклов создает еще одну строку, и каждый цикл внутреннего цикла создает другой столбец в указанной строке.

if ((x + y) % 2 == 0) использует % (по модулю), чтобы определить, имеет ли x + y делится на 2 остаток. Если результат равен 0, тогда у него не осталось остатка, и, таким образом, это четное число, поэтому выйдите из пространства, иначе выйдите из #, создав шаблон вашей шахматной доски.

Так, например, первый квадрат в верхнем левом углу будет (0 + 0) % 2 в результате 0 так напечатать пробел и следующий квадрат над будет (1 + 0) % 2 бы 1 так напечатать #.

Что касается книги «Красноречивый JavaScript» Марии Хавербеке, да, это определенно отличная книга. Он охватывает множество тем и делится на отдельные главы, поэтому он отлично подходит и для справки. Хотя один недостаток, который я лично нашел в книге, заключается в том, что в некоторых главах автор использует очень сложные и запутанные примеры для демонстрации использования JavaScript.

+0

Я так плохо это понимаю, но я получаю это:« Так например, первый квадрат в верхней части left будет (0 + 0)% 2, что приведет к 0, поэтому напечатайте пробел, а следующий квадрат будет равен (0 + 1)% 2 будет равно 1, поэтому напечатайте # «почему x 0? как насчет 2-й линии и так далее? почему он начинается с # –

+0

Посмотрите на 'for (var x = 0; x kevinto

+0

Возможно, стоит проверить главу 2 [** Для циклов ** [(http://eloquentjavascript.net/02_program_structure.html#h_oupMC+5FKN)), чтобы немного обновить. – kevinto

0

Это мое решение, если LineCounter даже, первый внутренний цикл выполняется, если LineCounter нечетно, второй внутренний цикл выполняется:

var line = "", size = 8, char; 
for (var linecounter = 0; linecounter < size; linecounter++){ 
    if (linecounter % 2 == 0) 
    for (var charcounter = 0; charcounter < size; charcounter++){ 
     if (charcounter % 2 == 0) 
     char = "_"; 
     else 
     char = "#"; 
     line = line + char; 
    } 
    else 
     for (var charcounter = 0; charcounter < size; charcounter++){ 
     if (charcounter % 2 == 0) 
      char = "#"; 
     else 
      char = "_"; 
     line = line + char; 
     } 
line = line + "\n"; 
} 
console.log(line); 
0

Вот ответ, который получает работу.

function makeGrid(rows){ 
    var str = ''; 
    for (var i = 0; i < rows; i++) { 
    for (var j = 0; j < rows; j++) { 
     if((i+j)%2===0){ 
     str += '#'; 
     } else { 
     str += ' '; 
     } 
    } 
    str += '\n'; 
    } 
    return str; 
} 
Смежные вопросы