Javascript во время расчета цикла - PullRequest
0 голосов
/ 06 марта 2012

Я бы не стал запускать это на вашем месте:

Javascript:

(function() {
    var a = 1, 
        b = a, 
        c = b,
        d = 1,
        e = 1;

    while ( d != 0 && e != 0) {
        b = Math.sqrt(a*a+a*a);
        c = 2*a-b;

        e = b%1;
        f = c%1;

        document.write(a);

        a++;
    } 

    document.write('a = ' + a);
    document.write('b = ' + b);
    document.write('c = ' + c); 

})();​

Да, в принципе, я хочу вычислять одно и то же уравнение снова и снова, пока все три не будут целыми числами сJavascript, а затем распечатать их.Пожалуйста, знайте, что до недавнего времени я использовал только jQuery.

Это, кажется, просто повторяется бесконечно, хотя я нахожу странным, что он не печатает a при вычислении, не уверен, что так работает цикл javascript while.

Кроме того, почему я не могу использовать Math.sqrt(2a^2) для вычисления B?

Ответы [ 2 ]

3 голосов
/ 06 марта 2012

Оно никогда не заканчивается, потому что d никогда не будет равно 0. Вы инициализируете его 1 и никогда не переназначаете.Вы также используете необъявленную переменную f.Это должно быть d?

Я бы также предложил использовать console.log вместо document.write.Он сбрасывается чаще, чем DOM, и, как правило, обладает гораздо лучшими возможностями ведения журнала.Проверьте Инспектор WebKit (Safari и Chrome), Firebug (Firefox) или Инструменты разработчика F12 (IE).

Как указывал PaulP.RO, желаемый синтаксис для возведения в степень является недопустимым синтаксисом JavaScript.Вы можете написать это так, если хотите:

b = Math.sqrt(2 * Math.pow(a, 2));
3 голосов
/ 06 марта 2012

Math.sqrt(2a^2) не работает, потому что:

1) Вы должны быть явными в Javascript, когда хотите умножения с помощью *.2a не означает 2*a.2) ^ имеет другое значение в Javascript, чем возведение в степень.Это означает Побитовый XOR

И то, и другое верно и для многих других языков программирования.Math.sqrt(2*a*a) будет работать для вас.

Ваш цикл не завершается, потому что d != 0 всегда будет верным, поскольку вы никогда не измените d по сравнению с его первоначальным значением 1.

Я не уверен, что вы пытаетесь сделать с b%1 и c%, но любое целое число mod 1 даст вам 0.

На экран ничего не выводится, потому что ваш цикл никогда не выполняетсяпрекратить выполнение и, следовательно, не дает веб-браузеру возможности что-либо отобразить.

...