2016-09-10 2 views
-2

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

for (i=11;i<25;i++) { 
    var array = (i).toString(10).split("").map(Number) 
    var element0 = array[0] 
    var element1 = array[1] 
    var total = (element0*element0)+(element1*element1) 
    while (total>9) { 
    array = (total).toString(10).split("").map(Number) 
    element0 = array[0] 
    element0 = array[1] 
    total = (element0*element0)+(element1*element1) 
    } 
    if (total == 1) { 
    console.log(i + " is correct") 
    } 
} 

Всякий раз, когда я запускаю этот процесс, браузер замораживается, и мне нужно принудительно закрыть его. Я новичок в Javascript, поэтому я был бы признателен за любую помощь. Спасибо.

+0

Примерно в 8-й строке вы дважды присваиваете 'element0'' массивом [0] ', а затем' array [1] ' , Это означает, что 'element0' всегда будет иметь значение' array [1] '. – Soviut

+3

1. Что это? Оно «возвращает только одно значение» или оно замерзает? 2. Пожалуйста, отсканируйте свой код с готовностью, обратившись за помощью. 3. Лучший способ узнать, почему он замерзает (бесконечно циклично) - использовать полнофункциональный отладчик, встроенный в ваш браузер, и пропустить код, оператор за инструкцией, наблюдая за значениями. Поэтому лучше всего искать, как использовать отладчик, встроенный в ваш браузер. (Или теперь отлаживать NodeJS, если вы это используете.) 4. 11-24 (включительно) не «все двузначные числа». –

ответ

0

Вы должны отладить свой код, например, простое предупреждение, как это:

for (i=11;i<25;i++) { 
var array = (i).toString(10).split("").map(Number) 
var element0 = array[0] 
var element1 = array[1] 
var total = (element0*element0)+(element1*element1) 
while (total>9) { 
array = (total).toString(10).split("").map(Number) 
element0 = array[0] 
element0 = array[1] 
total = (element0*element0)+(element1*element1) 
alert(total) 
} 
if (total == 1) { 
console.log(i + " is correct") 
} 
} 

покажет вам проблему, сценарий продолжает получать одни и те же три числа каждые три итерации!

P.S. это хорошая практика, чтобы прервать ваши заявления точкой с запятой, даже если это не обязательно :)

+0

Не отлаживайте, используя вызовы 'alert'. Используйте фактический отладчик. Если вы действительно хотите испечь свою логику отладки в свой код, просто используйте ключевое слово 'debugger', которое приведет к отключению точки останова при обнаружении. Если вы не хотите использовать отладчик (по какой-то причине) и/или хотите получить некоторую обратную связь о том, что делает код в какой-то момент, тогда 'console.log' (или' info', 'trace',' warn' , 'error' и т. д.) необходимую вам информацию. Вызов «alert» - очень плохой способ делать вещи, он не может использоваться, если вы хотите проверить код, не изменяя его, и это особенно плохо, так как это может вызвать или замаскировать некоторые ошибки. – vlaz

+0

Я полностью согласен с вами в профессиональном конкурсе, но так как этот код кажется для меня просто небольшим упражнением, я бы для него был бы хорошим базовым инструментом такого «предупреждения» :) –

+0

Я не согласен. Использование 'alert' не является и не должно использоваться в качестве основного инструмента, потому что это не так. Это влияет на ваш код и то, что вы видите больше, чем удобно, и во многих случаях он даст неправильные результаты, если он не изменит ваш код. Использование 'alert' для отладки действительно не рекомендуется. Тем более, что 'console.log' предоставит вам эквивалентный или _better_ вывод без каких-либо недостатков. И все, что вам нужно сделать, это просто заменить один вызов другим, и все. Более того, оператор журнала можно просто оставить, и это тоже поможет в будущем. – vlaz

Смежные вопросы