![]() |
Программное создание переменных.
Требуется создать n-ое количество переменных программно, количество которых заранее неизвестно. Необходимы для создания текстовых полей, для ввода значений в матрицу (массив). Как создать n-ое кол-во переменных (с разными названиями) или как создать вводимое текстовое поле, для ввода значений (а не "значение") массива?
|
AS3 != Lisp :D
Не создавайте переменные динамически. Это возможно, но очень сложно. Можно динамически создать поля (свойства или методы) у динамических объектов, как правило, проще для этого использовать типы объектов специально задуманые как коллекции - Object, Array, Dictionary, Vector, XML / XMLList. |
А можно как-нибудь создать текстовое поле, чтобы элемент массива являлся идентификатором?
Просто к примеру есть алгоритм, для рассчета системы уравнений методом Гаусса, пользователь вводит базис 6, и создаются 36 + 6 текстовых полей для введения коэффициентов в виде матрицы. Создать саму матрицу не сложно вроде как: Код AS3:
|
matrix[2][8] = 'myValue'; Не?
|
А как сделать так, чтобы matrix[2][8] был идентификатором текстового поля? как из компиллятора написать это то ясно :).
|
А что мешает текстовому полю быть элементом массива?
|
А если будет, то будут возможны математические преобразования? Покажите как?
|
Математические преобразования чего?
|
Элементов матрицы. Деление и вычитание соответствующих элементов массивов, если введены численные значения разумеется.
Код AS3:
|
Собирайте двумерку после того, как пользователь нажал на кнопку выполнения.
|
Это понятно.
Пользователь вводит базис - к примеру 5. Создается нулевая матрица 6x5; Как сделать так, чтобы пользователь мог ввести значения в матрицу, если мы не знаем заранее сколько переменных будет всего, а узнаем это только после того, как пользователь определил сколько их? ведь нельзя сделать matrix[1][3]:TextField=new TextField; =). а как надо? |
Если чесно, я где-то перестал понимать, что вы хотите сделать. Пользователь может ввести значение только в текстовое поле, в матрицу он его никак ввести не может - это может сделать только код написаный вами.
|
MrYeti, я бы сделал так:
Массивов должно быть два - в одном хранятся элементы матрицы, числа, в другом ссылки на текстовые поля. 1. Получаем от пользователя базис. 2. Соответственно, понимаем какое количество переменных нужно создать и становится понятной размерность матрицы. Я не знаю как принимается это решение, но, вероятно, вы знаете как. 3. Создаете в цикле нужное количество текстовых полей (например для 6х5 = 30 полей.) Позиционируете их, добавляете в дисплейлист, затем ссылки на текстовые поля кладете в массив для текстовых полей. 4. Создайте какую-нибудь кнопку "Ок". Пользователь должен заполнить все поля, а потом нажать "Ок". 5. Когда все поля заполнены и пользователь нажал "Ок" - в цикле перебираем массив с текстовыми полями и читаем из них данные и кладем в ваш массив содержащий элементы матрицы myMatrix.push = Number (myTextFields[i].text). Желательно проверять по ходу дела, что вы читаете, чтобы не было незаполненных полей и т.п. Массив данных матрицы получается одномерный, но зная размерность матрицы вполне можно вынуть оттуда данные в том порядке как вам надо. 6. Удаляете все текстовые поля воспользовавшись массивом в котором вы сохранили на них ссылки removeChild(myTextFields[i]); 7. Считаете то, что вам надо используя массив с полученными данными myMatrix. 8. Если надо считать снова - повторяете процесс сначала. |
В теории то я тоже так думал, но вот 2 и 3-ий пункты не знаю как реализовать...
Именно как, только что узнав суммарное количество переменных, создать столько же текстовых полей, которые будут ссылками этих переменных? Кстати можно сделать текстовое поле, в котором можно через запятую можно было бы перечислить элементы массива? Чтобы массив считал введенное значениями, а не текстовой строкой? Ex: пользователь введет значение n=3; появятся 3 строки, характеризующие строки массива. и в каждую введет что-то вроде: 1, 2, 3, 4 1, 4, 2, 1 2, 4, 2, 2 А в программе такой запрос воспроизвел бы: matrix[0][0]=1; matrix[0][1]=2; matrix[0][2]=3; matrix[0][3]=4; matrix[1][0]=1; matrix[1][1]=4; ... matrix[m][n]=что-нибудь; |
Цитата:
Код AS3:
|
по п.2 Мне кажется что зависимость такая:
Код AS3:
n = 5 -> 6 * 5 = 30 Оно? по п.3: Код AS3:
|
Так можно создать текстовые поля, но их идентификатор будет 1 tf, так что не получится.
Сейчас пробую как Obi предложил. Вродь должно получиться... |
Цитата:
вопрос, на сколько я понял, не в том, как их создавать, а в том, как к ним потом обращаться. предлагаю способ, когда каждый элемент вашей матрицы будет помещен в объект Object, который мы снабдим парой свойств i и j - координатами (для случая двумерной матрицы) и текстовым полем для ввода значения Код AS3:
линейный массив будет удобен, поскольку изначально размерность вашей матрицы неизвестна. каждый элемент линейного массива хранит в себе его координаты в вашей матрице (i,j) и текстовое поле для ввода значения вообще, как мне кажется, лучше использовать универсальную схему, которой пофигу размерность. для ввода значений использовать одно текстовое поле и несколько полей для ввода координаты элемента матрицы. целевой Object в который мы будем складывать все, будем хранить координату элемента. А все объекты будем складывать в линейный массив, чтобы потом иметь возможность работать с любым из элементов матрицы. такая схема будет эластичной :), хотя и не очень быстрой при больших размерностях. зато универсальной |
Код AS3:
|
| Часовой пояс GMT +4, время: 02:37. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.