Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 06.11.2011, 22:09
Ookami вне форума Посмотреть профиль Отправить личное сообщение для Ookami Найти все сообщения от Ookami
  № 1  
Ответить с цитированием
Ookami
 
Аватар для Ookami

Регистрация: Aug 2011
Адрес: 56° 51' с.ш. 53° 13' в.д.
Сообщений: 172
Записей в блоге: 1
По умолчанию Работа с двумерным массивом

Доброго времени суток. Помогите разобраться с массивом. Есть код, заполняющий матрицу числами от 1 до 3:

Код AS3:
public var board:Array = new Array();
 
private function genBoard():void {
	for (var i:int = 0; i < 16; i++) {
		for (var j:int = 0; j < 16; j++) {
			board[i][j] = Math.floor(Math.random() * 3 + 1);
		}
	}
}
При присваивании значения board[i][j] FD ругается: [Fault] exception, information=TypeError: Error #1010: Термин не определен и не имеет свойств. Понимаю что неправильно объявляю массив, но не могу найти верного решения. Помогите пожалуйста.

Старый 06.11.2011, 22:13
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 2  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Код AS3:
public var board:Array = new Array();
 
private function genBoard():void {
	for (var i:int = 0; i < 16; i++) {
                board[i] = new Array();
		for (var j:int = 0; j < 16; j++) {
			board[i][j] = Math.floor(Math.random() * 3 + 1);
		}
	}
}

Старый 06.11.2011, 22:14
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 3  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Цитата:
FD ругается: [Fault] exception, information=TypeError: Error #1010: Термин не определен и не имеет свойств. Понимаю что неправильно объявляю массив, но не могу найти верного решения
потому что на каждую позицию массива нужно сначала так же затолкать массив
Код AS3:
public var board:Array = []; // массив лучше создавать так: [], а не так: new Array()
 
private function genBoard():void {
	for (var i:int = 0; i < 16; i++) {
                       board[i] = []; // новый массив, для каждой ячейки
		for (var j:int = 0; j < 16; j++) {
			board[i][j] = Math.floor(Math.random() * 3 + 1);
		}
	}
}

Старый 06.11.2011, 22:15
Ookami вне форума Посмотреть профиль Отправить личное сообщение для Ookami Найти все сообщения от Ookami
  № 4  
Ответить с цитированием
Ookami
 
Аватар для Ookami

Регистрация: Aug 2011
Адрес: 56° 51' с.ш. 53° 13' в.д.
Сообщений: 172
Записей в блоге: 1
Оу, получается двумерным его сразу создать нельзя? Спасибо большое.

Добавлено через 41 секунду
А в чем разница между
Код AS3:
var board:Array = []
и
Код AS3:
var board:Array = new Array()

Старый 06.11.2011, 22:17
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 5  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Конечно нельзя. Как он узнает, что должно быть в каждой его ячейке?

Старый 06.11.2011, 22:41
Ookami вне форума Посмотреть профиль Отправить личное сообщение для Ookami Найти все сообщения от Ookami
  № 6  
Ответить с цитированием
Ookami
 
Аватар для Ookami

Регистрация: Aug 2011
Адрес: 56° 51' с.ш. 53° 13' в.д.
Сообщений: 172
Записей в блоге: 1
Ну раз уж зашла речь про массивы, то вдогонку еще пара вопросов.
1. На сайте адоба написано:
Цитата:
Не применяйте класс Array для создания массивов ассоциативных элементов (называемых также хэшами), которые представляют собой структуры данных, элементам которых присваиваются имена, а не числа. Чтобы создать массивы ассоциативных элементов, воспользуйтесь классом Object. Хотя ActionScript позволяет создавать массивы ассоциативных элементов с помощью класса Array, ни один из методов и свойств класса Array нельзя использовать с этими массивами.
Если все-таки использовать Array для ассоциативного массива, какие негативные последствия могут быть? Из работы с таким массивом предвидится только добавление элементов и последующее обращение к ним по имени.
2. Можно ли при инициализации массива жестко указать, какой тип данных будет в нем храниться?

Старый 06.11.2011, 22:44
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 7  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Цитата:
Сообщение от Ookami Посмотреть сообщение
Оу, получается двумерным его сразу создать нельзя? Спасибо большое.

Добавлено через 41 секунду
А в чем разница между
Код AS3:
var board:Array = []
и
Код AS3:
var board:Array = new Array()
В целом ни в чём, первая работает чуть быстрее, вторая более ООП-шная. Ну ещё краткая запись не умеет инициализировать массив заданного размера.

Старый 06.11.2011, 22:56
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 8  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Цитата:
2. Можно ли при инициализации массива жестко указать, какой тип данных будет в нем храниться?
Нет. Но для этого и был создан Vector
Код AS3:
var array:Vector.<String> = new Vector.<String>(); // будет хранить строки
Цитата:
Из работы с таким массивом предвидится только добавление элементов и последующее обращение к ним по имени.
Object для этих целей удобнее


Последний раз редактировалось goodguy; 06.11.2011 в 22:58.
Старый 06.11.2011, 22:59
Ookami вне форума Посмотреть профиль Отправить личное сообщение для Ookami Найти все сообщения от Ookami
  № 9  
Ответить с цитированием
Ookami
 
Аватар для Ookami

Регистрация: Aug 2011
Адрес: 56° 51' с.ш. 53° 13' в.д.
Сообщений: 172
Записей в блоге: 1
Спасибо за ответы, все понятно.

Старый 06.11.2011, 23:03
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 10  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
Если все-таки использовать Array для ассоциативного массива, какие негативные последствия могут быть?
Во-первых, Вы получите избыточный объект, содержащий массу методов, ни один из которых не может быть использован в контексте ассоциативного массива. Лишний вес и память. Во-вторых, это грязь в коде и нарушение принципа наименьшего удивления))
Цитата:
2. Можно ли при инициализации массива жестко указать, какой тип данных будет в нем храниться?
Это класс Vector.<T>, типизированный массив.
__________________
Reality.getBounds(this);

Создать новую тему Ответ Часовой пояс GMT +4, время: 03:58.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
array , object , Vector , двумерный массив , матрицы
Опции темы
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 03:58.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.