XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Iron
Листовой
offline
Опыт: 24,427
Активность:
Переменные в цикле
Мне нужно чтобы вот это работало, а оно не хочет. Почему?

Код:
function addI takes nothing returns nothing
local integer i = 1
local integer n = 0
    loop
        exitwhen i > 255
        loop
            exitwhen n > i
            set udg_Strings[.i] = ( udg_Strings + "|" )
            set n = n + 1
        endloop
        set i = i + 1
        set n = 0
    endloop
endfunction


Прим. [.i] стоит из-за воспринимания курсива.

Причем кода в exitwhen n > i вместо i ставишь число, то все пашет. Может быть в условии цикла нельзя юзать переменные ?

[i]Iron добавил:

Т.е. функцию компиллер пропускает как нормальную, но при ее запуске переменная udg_Strings ложится, т.е. не одна ссылка на нее потом не пашет.

Отредактировано Iron, 21.06.2006 в 18:09.
Старый 21.06.2006, 15:55
bugmaker
invulnerable
offline
Опыт: 2,282
Активность:
такое бывает если переменная - строка изначально равна null
сам представь, что будет если к null прикрепить "rofl" например...
тоесть udg_String+"|" равносильно null+"|"

set udg_Strings[i] = ( udg_Strings[i] + "|" ) пропустил (ну этьо наверно форум принял за курсив...)
Старый 21.06.2006, 17:15
Iron
Листовой
offline
Опыт: 24,427
Активность:
bugmaker, нет, строка точно не пустая.
Старый 21.06.2006, 18:09
bugmaker
invulnerable
offline
Опыт: 2,282
Активность:
тогда возможно превысил максимально допустимое число нитераций в цмклах (у тебяж гдето 255*n)
Старый 21.06.2006, 18:53
Iron
Листовой
offline
Опыт: 24,427
Активность:
Цитата:
нитераций в цмклах

Переведи это.
Старый 21.06.2006, 21:48
bugmaker
invulnerable
offline
Опыт: 2,282
Активность:
тьфу блин извени, просто быстро пальцами по клаве стучю :D я хотел написать интераций в цикле...
это означает ммм. кароче давай на примере кхм

допустим следующий цикл

Код:
set i=1
loop
exitwhen i>10
 // нисчего
set i=i+1
endloop

тут за 1 интерацию совершается 10 действий. в варике сущестывует лимит действий на 1 интерацию, тоесть следующий цикл отключится потом (не вылетет, а перестанет выполнятся на n-ом действии)

Код:
set i=1
set j=1
loop
exitwhen i>1000
 set j=1
 loop
 exitwhen j>1000
  // ничсего
 set j=j+1
 endloop
set i=i+1
endloop

Отредактировано bugmaker, 21.06.2006 в 23:15.
Старый 21.06.2006, 22:35
Iron
Листовой
offline
Опыт: 24,427
Активность:
Цитата:
(не вылетет, а перестанет выполнятся на n-ом действии)

Т.е. для цикла вида
Код:
set i=1
set j=1
loop
exitwhen i>1000
 set j=1
 loop
 exitwhen j>1000
  // ничсего
 set j=j+1
 endloop
set i=i+1
endloop

интераций не 1000 а 1000000 ?

Но тогда вопрос почему у меня не оформляется не одно обращение на udg_Strings , т.е. я не могу даже узнать длину строки ни одной из ячеек.
Старый 22.06.2006, 00:55
DioD

offline
Опыт: 45,134
Активность:
Лучше сосчитай сколько будет действий, а их должно быть 255+255+1, и сделай через один цикл.
Старый 22.06.2006, 04:42
Iron
Листовой
offline
Опыт: 24,427
Активность:
DioD, задача такова:
Необхотимо заполнить string массив на 256 ячеек так, чтобы в 1-й ячейке (не 0-вой, а 1-ой) лежало "|" во второй "||" в третей "|||" в четвертой "||||" ... т.е. в 255-й ячейке будет лежать 255 таких |.
И как ты здесь предлогаешь обойтись без двойного цикла ?
Не ну в принципе я обошелся, создав string переменную с 255-ю "|" и создав цикл вида :
Код:
set i=1
loop
    exitwhen i > 255
    set udg_Strings[.i] = ( udg_Strings[.i] + substring(udg_string, 1, i )
    set i = i + 1
endloop

здесь udg_string и есть переменная с черточками
Но вопрос с тем почему нельзя использовать переменную в условии цикла остался не раскрытым.
Все, хватит давать советы как изменить ту функцию, лучше скажитепочему она не работает.
Старый 22.06.2006, 13:18
bugmaker
invulnerable
offline
Опыт: 2,282
Активность:
"интераций не 1000 а 1000000 ?"
не путай - не интераций а действий за 1 интерацию

bugmaker добавил:
да без двойного цикла вроде можно. ммм я ща еще подумаю... а может кто нить из "отцов подскажет" (но я все же прикину)

bugmaker добавил:
а может вот так:

Код:
local integer i
local string s
set i=1
set s=""

loop
exitwhen i>255
 set s=s+"|"
 set udg_strings=s
set i=i+1
endloop


[i]bugmaker добавил:

а то у тебя хз скока действий там делается (пока он будет заполнять глобалку (макс это 255 действий на последнем)) тоесть гдето i*i, а тут всего i
Старый 22.06.2006, 13:38
Iron
Листовой
offline
Опыт: 24,427
Активность:
bugmaker, это ясно. Кстати всем фтыкать зачем оно мне нужно было http://xgm.guru/forum/showthread.php?p=116301

Просто интересно почему ложится переменная? Ты же говорил, что цикл просто вырубится при привышении кол-ва действий, а он мне еще ипеременную запарывает.
Старый 22.06.2006, 14:28
bugmaker
invulnerable
offline
Опыт: 2,282
Активность:
вопще конечно странно, но всетаки попробуй в тот твой старый код вот что (на перфую строчку)
Код:
set i=1
loop
exitwhen i>255
   set udg_strings[i] = ""
set i=i+1
endloop


вапще может она равна null
Старый 22.06.2006, 17:19
Iron
Листовой
offline
Опыт: 24,427
Активность:
bugmaker, даже если она равна null, то всеравно функция возвращающая размер строки должна вернуть 0, а она вообще после запуска этой функции ничего не возвращает. Т.е. переменная как будто исчезает.
Старый 22.06.2006, 20:32
J
expert
offline
Опыт: 48,447
Активность:
я не понимаю че тут сложново... Iron задйи в асю

Jon добавил:
Цитата:
Сообщение от Iron
И как ты здесь предлогаешь обойтись без двойного цикла ?

ндауш... :p
Iron ты это имел ввиду?

Код:
local integer i
    set udg_string[1] = "|"
    set i = 2
    loop
        exitwhen i > 256
        set udg_string[i] = ( udg_string[( i - 1 )] + "|" )
        set i = i + 1
    endloop
    set i = 0

Отредактировано Jon, 22.06.2006 в 21:39.
Старый 22.06.2006, 21:08
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



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