Я достиг предела разбора? - PullRequest
       5

Я достиг предела разбора?

0 голосов
/ 20 октября 2019

У меня проблема с проектом, над которым я работаю. Полагаю, полное объяснение лучше ... У меня есть очень длинный массив, который работает для следующего: Двенадцать флажков со всеми возможными комбинациями флажков == true и флажок == = false с минимум тремя флажками == true. Это для выбора музыкальных нот (C, C #, DD # и т. Д.), По одному для каждого флажка до одной октавы, для представления всех возможных аккордов.

Я начинаю с этого:

{
var cb = getElementsByType(form.getElementsByTagName('input'), "checkbox");

Тогда одна строка выглядит следующим образом:

 if ( 
   cb [0].checked == true 
&& cb [1].checked == false 
&& cb [2].checked == false 
&& cb [3].checked == false 
&& cb [4].checked == true 
&& cb [5].checked == false 
&& cb [6].checked == false 
&& cb [7].checked == true 
&& cb [8].checked == false 
&& cb [9].checked == false 
&& cb [10].checked == false 
&& cb [11].checked == false ) 
{ 
alert('C'); 
}

для одного аккорда (до мажор), а затем следующий аккорд:

else if (    
   cb [0].checked == true 
&& cb [1].checked == false 
&& cb [2].checked == false 
&& cb [3].checked == true 
&& cb [4].checked == false
&& cb [5].checked == false 
&& cb [6].checked == false 
&& cb [7].checked == true 
&& cb [8].checked == false 
&& cb [9].checked == false 
&& cb [10].checked == false 
&& cb [11].checked == false ) 
) 
{ 
alert('Cm'); 
}

Обратите внимание, что только флажки 3 и 4 различны. Затем, в конце всех возможных комбинаций аккордов, которые у меня есть, внизу:

else    
{ 
alert('Sorry, your selection did not make a recognisable chord. Please try again. Remember to select at least three notes');    
} 
}

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

if (
   ( cb[0].checked == true || cb[12].checked == true ) 
&& ( cb[1].checked == false && cb[13].checked == false ) 
&& ( cb[2].checked == false && cb[14].checked == false )

и т. Д. (Я думаю, скобки не нужны для «ложного»; это просто помогает организовать его таким образом) вверхдо конца первого аккорда:

) 
{ 
alert('C'); 
}

Проблема, которую я нахожу, состоит в том, что после добавления этого примерно до половины, он внезапно не работает. Я думаю, что это предел синтаксического анализа, который я достиг. Поэтому мне нужно выяснить, как сократить это, иначе забыть о добавлении второй октавы. Любые идеи с благодарностью. Вот страница, если кто-то хочет посмотреть весь массив: Name That Chord

...