Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Ошибка в скрипте - If ... Else ... и цикл For (https://javascript.ru/forum/dom-window/18038-oshibka-v-skripte-if-else-i-cikl.html)

Areso 14.06.2011 16:07

Ошибка в скрипте - If ... Else ... и цикл For
 
<script>
   function Calc()
{
   
   var priceitem = Number(document.getElementById('priceitem').value)
    
   alert (priceitem)
    
   var priceenchant = Number(document.getElementById('priceenchant').value)

   alert (priceenchant)
    
   var basicchance = Number(document.getElementById('basicchance').value)
   
   alert (basicchance)
    
   var safetyenchant = Number(document.getElementById('safetyenchant').value)
   
   alert (safetyenchant)
    
   var levelenchant = Number(document.getElementById('levelenchant').value)
   
   alert (levelenchant)
    
   var sum=0
   var sumpriceitem = 0
   
  
  if (levelenchant >= 0) and (levelenchant=<20)
    {
        if (basicchance >=1) and (basicchance=<100)
        {
            if (levelenchant > safetyenchant)
            {
                for (i=1; levelenchat-safetyenchant; i++)
		{
                sum = sum + (1 - (basicchance / 100) ^ i) * priceitem
		}
            }
            sumpriceitem = priceitem + priceenchant * levelenchant + sum
	    document.getElementById('summary').value = sumpriceitem
        }
        else
	{
        alert=("Chance of successful enchant incorrect. Please, re-enter chance of enchant from 0 to 100")
	}
    }

    else
   {
   alert=("Level of enchant incorrect. Please, re-enter level of enchant from 0 to 20")
   }
}
</script>


Код:

<textarea id="priceitem" rows="1" value="100"></textarea>
<p>
<textarea id="priceenchant" rows="1" value="5"></textarea>
<p>
<textarea id="basicchance" rows="1" value="70"></textarea>
<p>
<textarea id="safetyenchant" rows="1" value="3"></textarea>
<p>
<textarea id="levelenchant" rows="1" value="4"></textarea>
<hr>
<textarea id="summary" rows="1" readonly="1"></textarea>
    <p>
    <button onclick="Calc()">Calc</button>

И, почему-то, не вгоняет значения по умолчанию в текстовые поля.

nikita.mmf 14.06.2011 19:28

Обратите внимание на синтаксис...
if ( levelenchant >= 0 && levelenchant =< 20 )

Areso 16.06.2011 07:52

<script>
       function Calc()
    {
        
       var priceitem = Number(document.getElementById('priceitem').value)
         
       alert (priceitem)
         
       var priceenchant = Number(document.getElementById('priceenchant').value)
     
       alert (priceenchant)
         
       var basicchance = Number(document.getElementById('basicchance').value)
        
       alert (basicchance)
         
       var safetyenchant = Number(document.getElementById('safetyenchant').value)
        
       alert (safetyenchant)
         
       var levelenchant = Number(document.getElementById('levelenchant').value)
        
       alert (levelenchant)
         
       var sum=0
       var sumpriceitem = 0
        
        if ((levelenchant >= 0) && (levelenchant<=20))
        {
            if ((basicchance >=1) && (basicchance<=100))
            {
            if (levelenchant > safetyenchant)
               {
                for (i=1; levelenchat-safetyenchant; i++)
                {
                sum = sum + (1 - (basicchance / 100) ^ i) * priceitem
                }
               }
            sumpriceitem = priceitem + priceenchant * levelenchant + sum
            document.getElementById('summary').value = sumpriceitem
            }
            else
            {
            alert=("Chance of successful enchant incorrect. Please, re-enter chance of enchant from 1 to 100")
            }
        }
        else
        {
        alert=("Level of enchant incorrect. Please, re-enter level of enchant from 0 to 20")
        }
    }
    </script>

К сожалению, не работает.

dmitriymar 16.06.2011 10:22

Areso,
а как насчёт в коде поставить для начала ; ? обязательный синтаксис языка никто не отменял ещё

nikita.mmf 16.06.2011 10:23

for (i=1; levelenchat-safetyenchant; i++)

Вечный цикл

Areso 16.06.2011 10:35

Цитата:

Сообщение от dmitriymar (Сообщение 108985)
Areso,
а как насчёт в коде поставить для начала ; ? обязательный синтаксис языка никто не отменял ещё


"Как и во многих языках, предложения на языке javascript можно разделять точкой с запятой.

Но при переходе на новую строку в javascript точка с запятой становится необязательна, ее можно не ставить.

Эти две строки полностью эквивалентны:
a = 5
a = 5; " (С)

javascript.ru/для чайников

Цитата:

Сообщение от nikita.mmf
for (i=1; levelenchant-safetyenchant; i++)

Вечный цикл

for (i=1; levelenchant-safetyenchant; i++)
почему вечный? старт. значение = 1, значение окончания цикла есть, вычисляемое значение, приращение задано - раз приращение задано, цикл не может быть вечным.

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

ksa 16.06.2011 10:54

Цитата:

Сообщение от Areso
раз приращение задано, цикл не может быть вечным

Странное высказывание... :D Цикл выполняется пока истино "условие", а оно тут разность двух чисел.

if (1-2) alert(1)
if (1-1) alert(2)
if (2-1) alert(3)


Если разность не будет равна нулю - цикл так и будет крутиться...

Вот что у автора

if (*!*levelenchant > safetyenchant*/!*) {
	for (i=1; levelenchat-safetyenchant; i++) {
		sum = sum + (1 - (basicchance / 100) ^ i) * priceitem
	}
}


Разность всегда больше нуля - цикл вечный.

Areso 16.06.2011 11:07

Чего-то недопонимаю в логике конструкций.
Это же не while loop.
Здесь четко указано от какого значения и до какого...
Рабочие значения для этого цикла:
levelenchant = от 0 до 20, но как правило больше 4 и до 20 (из усл. выше). По умолчанию 4
safetyenchant = как правило, значение ровно 3.
Теперь, я инициирую цикл от 1 до (4-3) с приращением +1. Должен выполнится 1 раз.
Причем здесь условия?

Вот код этой же программы, написанной на VB6 (рабочий)

Код:

If levelenchant >= 0 And levelenchant <= 20 Then
    If chanceenchant >= 1 And chanceenchant <= 100 Then
      If levelenchant > safetyenchant Then
            For i = 1 To (levelenchant - safetyenchant)
            sum = sum + (1 - (chanceenchant / 100) ^ i) * priceitem
            Next i
        End If

        sumpriceitem = priceitem + priceenchant * levelenchant + sum
        Text6.Text = Str(sumpriceitem)
    Else
        a = MsgBox("Chance is incorrect" + Chr(13) + "Reenter chance of successful enchant, from 1 to 100", vbInformation + vbOKOnly, "Error:")
    End If
Else
    a = MsgBox("Enchant level is incorrect" + Chr(13) + "Reenter enchant level, from 0 to 20", vbInformation + vbOKOnly, "Error:")
End If
End Sub


ksa 16.06.2011 11:55

Цитата:

Сообщение от Areso
Вот код этой же программы, написанной на VB6

Ты сначала почитай как работает for на js... :D
http://javascript.ru/for

ksa 16.06.2011 12:03

Цитата:

Сообщение от Areso
Причем здесь условия?

Притом, что вторым параметром цикла является "условие". :)


Часовой пояс GMT +3, время: 19:45.