Просмотр полной версии : Баг Array или как это работает?
Собственно сталкнулся с странной штукой и хотел спросить как это работает.
txt:Array = new Array(1, 'Vasia', 2, 'Petia', 3, 'Kolia');
adres:int = 0;
while (txt[adres] <= txt[txt.length - 2]) //Незапускается
{ ...
adres += 2;
}
txt:Array = new Array(1, 'Vasia', 2, 'Petia', 3, 'Kolia');
adres:int = 0;
while (txt[adres] <= 3) // Запускается
{ ...
adres += 2;
}
txt:Array = new Array(1, 'Vasia', 2, 'Petia', 3, 'Kolia');
adres:int = 0;
while (txt[adres] <= parseInt(txt[txt.length - 2])) //Тоже заработало
{ ...
adres += 2;
}
Собственно не понятно почему txt[adres] является числом для сравнения, а txt[txt.length - 2] числом какбудно не является, хотя тип значения одинаковый.
Psycho Tiger
21.02.2011, 19:19
Ну Вы бы хоть ошибку привели.
mikhailk
21.02.2011, 19:39
txt:Array = new Array(1, 'Vasia', 2, 'Petia', 3, 'Kolia');
Выкиньте по возможности книжку, где посоветовали так делать.
Что в итоге-то надо?
Ошибки нету, доходит до цикла и пропускает его, как будто условия не соблюдены и выполняет программу далее.
Кстате если протрейсить перед циклом:trace(txt[txt.length - 2]) // 3
Разве это не должно вообще зависнуть??
txt:Array = new Array(1, 'Vasia', 2, 'Petia', 3, 'Kolia');
adres:int = 0;
while (txt[adres] <= txt[txt.length - 2]) //Незапускается
{ ...
adres += 2;
}
Array нетипизированный массив и компилятор понятия не имеет, что у него внутри.
Так тоже заработало бы:
Number(txt[txt.length - 2])
или так:
int(txt[txt.length - 2])
сорри, не заметил adres += 2;
бывает.. )
а почему у txt[adres] не придерается к типу?
Psycho Tiger
21.02.2011, 19:43
alatar, в этом и суть. Он не знает что внутри, поэтому все обращения осуществляются динамическим доступом, который не проверяется компилятором. Поэтому и непонятно, почему не заработало
Выкиньте по возможности книжку, где посоветовали так делать.
Что в итоге-то надо?
В общем, там создаются объекты с данными именами, ну и естественно это общий вид. Возможно есть более правильный способ, но я его пока не знаю.
а у меня так работает..
doTest();
function doTest():void
{
var txt:Array = new Array(1, 'Vasia', 2, 'Petia', 3, 'Kolia');
var adres:int = 0;
while( txt[adres] <= txt[txt.length - 2] )
{
trace( "while on " + adres );
adres += 2;
}
}
трейс:
while on 0
while on 2
while on 4
[['vasya',333]]
or
obj['vasya'] = 333
Не лучше ли так ? Если я верно понял задачу
не лучше ли сразу так?
[ 'Vasia', 'Petia', 'Kolia' ];
Кстати только что проверил, работает первоначальный вариант без проблем.
а у меня так работает..
doTest();
function doTest():void
{
var txt:Array = new Array(1, 'Vasia', 2, 'Petia', 3, 'Kolia');
var adres:int = 0;
while( txt[adres] <= txt[txt.length - 2] )
{
trace( "while on " + adres );
adres += 2;
}
}
трейс:
а это странно. у меня FD не запускает цикл.
Psycho Tiger
21.02.2011, 20:19
Ну что же он пишет, почему не запускает? Т_Т
Он просто пропускает цикл как при не соблюдении условий, и выполняет код далее после цикла...
Psycho Tiger
21.02.2011, 21:58
Грустно.
var txt:Array=["vasia","petya","fedya"];
var i:int=txt.length;
while (i--) trace("While on",txt[i],i);
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.