PDA

Просмотр полной версии : Вопрос по try-catch


DZHETIGAPA
05.04.2011, 17:48
Есть двумерный массив, при том я не знаю, существуют ли некоторые элементы массива или нет. Для этого использую обработку try-catch.
Вот код:

for (var i:int=0; i < 6; i++ )
{
for (var j:int = 0; j < 5;j++ )
{
try
{
textContent[i][j] = "";
textContent[i][j] = Lib.data.cat[1].cat[i+1].txt[j + 1].text[1] as String;

trace(textContent[i][j]);//выводит только значение для i =0 j=0, больше не выводит, хотя элементов еще много
}
catch (err:Error)
{
trace('i' + i + 'j' + j);//тут все остальные i j, кроме как i=0 j=0

}

}

}

Смысл в том, что этот блок обрабатывается один раз. После возникновения первой ошибки начинает работать только catch блок.

Или я не так понял суть блока try-catch?

DaFive
05.04.2011, 17:57
А зачем тут try..catch?

upd: или вы не уверены в строке Lib.data.cat[1].cat[i+1].txt[j + 1].text[1] as String; ? Я бы тоже не доверял.

DZHETIGAPA
05.04.2011, 18:01
Я же объяснил. Для обработки отсутствия некоторых элементов. Например Lib.data.cat[1].cat[3].txt[5].text[1] - не существует - значит будет выдана ошибка.

DaFive
05.04.2011, 18:02
if(Lib.data.cat[1].cat[3].txt[5].text[1] != null)
{
profit
}


upd: null, ну или что у вас там (undefined?) если элемент массива.

i.o.
05.04.2011, 18:09
совсем "по-правильному" будет:

if( "data" in Lib
&& "cat" in Lib.data
&& "cat" in Lib.data.cat[1]
&& "txt" in Lib.data.cat[1].cat[3]
&& "text" in Lib.data.cat[1].cat[3].txt[5]
&& Lib.data.cat[1].cat[3].txt[5].text[1] )
{
// TODO
}

убиццо...

DZHETIGAPA
05.04.2011, 18:11
Тут скорее в двумерном массиве ошибка, потрейсил, именно на двумерном массиве ошибка. Никак не могу привыкнуть, что в АС3,0 нет поддержки нормального двумерного массива.

Ошибку даже выдает вот на этом:

textContent[i][j] = "";

DZHETIGAPA
05.04.2011, 18:12
Выходит тему переименовать даже надо на двумерный массив...:)

i.o.
05.04.2011, 18:13
textContent[i] ||= [];
textContent[i][j] = "";

DZHETIGAPA
05.04.2011, 18:19
ИО! Благодарю тебя. Щас работает.

Объясни, что делает эта строчка(как я понимаю создает массив внутри другого массива):

textContent[i] ||= [];

DaFive
05.04.2011, 18:20
Эта строчка проверяет, если итый элемент не массив - делает из него массив.

upd: равносильно

if(textContent[i] == null)
{
textContent = [];
}

i.o.
05.04.2011, 18:23
DaFive все верно написал, только вот [i] потерял :)
textContent[i] = [];

DZHETIGAPA
05.04.2011, 18:30
Спасибо:)

DaFive
05.04.2011, 18:30
Ну да, каюсь.