Да, просто замени весь шаблон на этот:
|

14.06.2011, 15:07
|
|
Новичок на форуме
|
|
Регистрация: 14.06.2011
Сообщений: 5
|
|
|
Ошибка в скрипте - 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> |
И, почему-то, не вгоняет значения по умолчанию в текстовые поля.
|
|

14.06.2011, 18:28
|
|
Профессор
|
|
Регистрация: 01.02.2010
Сообщений: 364
|
|
Обратите внимание на синтаксис...
if ( levelenchant >= 0 && levelenchant =< 20 )
|
|

16.06.2011, 06:52
|
|
Новичок на форуме
|
|
Регистрация: 14.06.2011
Сообщений: 5
|
|
<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>
К сожалению, не работает.
|
|

16.06.2011, 09:22
|
|
х.з
|
|
Регистрация: 21.11.2010
Сообщений: 4,588
|
|
|
Areso,
а как насчёт в коде поставить для начала ; ? обязательный синтаксис языка никто не отменял ещё
Последний раз редактировалось dmitriymar, 16.06.2011 в 09:26.
|
|

16.06.2011, 09:23
|
|
Профессор
|
|
Регистрация: 01.02.2010
Сообщений: 364
|
|
for (i=1; levelenchat-safetyenchant; i++)
Вечный цикл
|
|

16.06.2011, 09:35
|
|
Новичок на форуме
|
|
Регистрация: 14.06.2011
Сообщений: 5
|
|
Сообщение от dmitriymar
|
Areso,
а как насчёт в коде поставить для начала ; ? обязательный синтаксис языка никто не отменял ещё
|
"Как и во многих языках, предложения на языке javascript можно разделять точкой с запятой.
Но при переходе на новую строку в javascript точка с запятой становится необязательна, ее можно не ставить.
Эти две строки полностью эквивалентны:
a = 5
a = 5; " (С)
javascript.ru/для чайников
|
Сообщение от nikita.mmf
|
for (i=1; levelenchant-safetyenchant; i++)
Вечный цикл
|
for (i=1; levelencha nt-safetyenchant; i++)
почему вечный? старт. значение = 1, значение окончания цикла есть, вычисляемое значение, приращение задано - раз приращение задано, цикл не может быть вечным.
UPD: нашел ошибку в переменной. Результат не изменился. Ну не вижу я ошибок, замылился глаз от постоянных переписываний и издевательств над тестовым сайтом этим несчастным кодом.
Последний раз редактировалось Areso, 16.06.2011 в 09:51.
|
|

16.06.2011, 09:54
|
 |
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,304
|
|
|
Сообщение от Areso
|
|
раз приращение задано, цикл не может быть вечным
|
Странное высказывание...  Цикл выполняется пока истино "условие", а оно тут разность двух чисел.
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
}
}
Разность всегда больше нуля - цикл вечный.
Последний раз редактировалось ksa, 16.06.2011 в 09:57.
|
|

16.06.2011, 10:07
|
|
Новичок на форуме
|
|
Регистрация: 14.06.2011
Сообщений: 5
|
|
Чего-то недопонимаю в логике конструкций.
Это же не 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 |
Последний раз редактировалось Areso, 16.06.2011 в 10:22.
|
|

16.06.2011, 10:55
|
 |
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,304
|
|
|
Сообщение от Areso
|
|
Вот код этой же программы, написанной на VB6
|
Ты сначала почитай как работает for на js...
http://javascript.ru/for
|
|

16.06.2011, 11:03
|
 |
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,304
|
|
|
Сообщение от Areso
|
|
Причем здесь условия?
|
Притом, что вторым параметром цикла является "условие". 
|
|
|
|