PDA

Просмотр полной версии : как отобразить переменную из массива в текстовом поле?


taux
12.04.2015, 00:57
Добрый вечер!


var arr3:Array = new Array;
//////////тут код с тем, как я забил данными arr3 ////////////////

for (var m:int = 0; m <= 8; m++) {
for (var n:int = 1; n <= 9; n++) {
var txt:TextField = new TextField;
txt.type = TextFieldType.DYNAMIC;
txt.width = 30;
txt.height = 30;
txt.x = 70+m*30;
txt.y = 30 + n*30;
txt.appendText(arr3[m][n]);// ругается на эту строчку [Fault] exception, information=TypeError: Error #1010: A term is undefined and has no properties.
addChild(txt);
}
}

Зачем ругается?

ZackMercury
12.04.2015, 01:03
Затем, что у вас пустой массив, а вы обращаетесь к каждой его ячейке как к ещё одному массиву.
В итоге, выбивается ошибка, что ячейка не массив.

taux
12.04.2015, 01:10
я тут код не показал, где я забил массив данными - через трейс массив показывает, а в поле не может

ZackMercury
12.04.2015, 01:13
Покажите код.

taux
12.04.2015, 01:24
package
{
import flash.display.Sprite;
import flash.text.*;

public class tableS extends Sprite
{

public function tableS()
{
var arr3:Array = new Array;

for (var i:int = 0; i <= 8; i++) {
arr3[i] = [];
for (var j:int = 0; j <= 8; j++) {
arr3[i][j] = j;
}
}



}
}
}

ZackMercury
12.04.2015, 01:28
У вас здесь 9 по j, а далее запрашивается 10-ый, вот тут
for (var n:int = 1; n <= 9; n++) {
Последней итерацией будет ошибка, такого массива нет.
+ к этому, первый элемент(под индексом 0) будет пропущен. Это умышленно?

UPD, хотя нет, не может быть. У вас под j идут не массивы, а числа. Поэтому странно. Должно при запросе undefined выбивать, но не ошибку.
Текущий код не должен вызывать ошибки. Или я невнимательно взглянул.

taux
12.04.2015, 01:45
запутался... щас перепроверю

Добавлено через 3 минуты
все работает! спасибо.. года уже не те (((( седина в бороду, а все лезу учиться

ZackMercury
12.04.2015, 01:52
седина в бороду, а все лезу учиться
Никогда не поздно развиваться с:

taux
12.04.2015, 02:11
виноват! не туда посмотрел
там будет так
var arr3:Array = [];
var arr:Array = [1,2,3,4,5,6,7,8,9];
for (var i:int = 0; i <= 8; i++) {

arr3[i] = [];
for (var j:int = 0; j <= 8; j++) {

arr3[i][arr[j]] = arr[j];
}
} trace (arr3);}

и в трейсе пишет ,1,2,3,4,5,6,7,8,9
почему-то перед единицей запятая как пустая ячейка

Добавлено через 2 минуты
по-этому мне пришлось глючно сделать тот цикл с 1 по 9, что б не отображать то, что перед единицей

вобщем чего-то я намудрил

Добавлено через 18 минут
почему в трейсе пишет ,1,2,3,4,5,6,7,8,9

или как создать нормальный двумер - 0,1,2,3,4,5,6,7,8?

samana
12.04.2015, 09:16
Чтобы не догадываться с числами в цикле, уже созданного, двумерного массива, то используйте свойство длины
for (var i:int = 0; i < arr.length; i++)
{
for (var j:int = 0; j < arr[i].length; j++)
{
tf.appendText(arr[i][j]);
}
}

ps. В пятом посте, ваш двухмерных массив создан правильно.
ps. Для красоты не хватает скобок new Array(), либо просто
var arr:Array = [];

taux
12.04.2015, 17:00
благодарю, запомню

ZackMercury
12.04.2015, 17:09
var arr3:Array = [];
var arr:Array = [1,2,3,4,5,6,7,8,9];
for (var i:int = 0; i <= 8; i++) {

arr3[i] = [];
for (var j:int = 0; j <= 8; j++) {

arr3[i][arr[j]] = arr[j];
}
} trace (arr3);}


Просто убрать это.

var arr3:Array = [];
var arr:Array = [1,2,3,4,5,6,7,8,9];
for (var i:int = 0; i <= 8; i++) {

arr3[i] = [];
for (var j:int = 0; j <= 8; j++) {

arr3[i][j] = arr[j];
}
} trace (arr3);}