![]() |
|
||||||||||
|
|||||
|
Регистрация: Mar 2009
Сообщений: 37
|
Это понятно.
Пользователь вводит базис - к примеру 5. Создается нулевая матрица 6x5; Как сделать так, чтобы пользователь мог ввести значения в матрицу, если мы не знаем заранее сколько переменных будет всего, а узнаем это только после того, как пользователь определил сколько их? ведь нельзя сделать matrix[1][3]:TextField=new TextField; =). а как надо? |
|
|||||
|
Modus ponens
|
Если чесно, я где-то перестал понимать, что вы хотите сделать. Пользователь может ввести значение только в текстовое поле, в матрицу он его никак ввести не может - это может сделать только код написаный вами.
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Mar 2010
Сообщений: 5
|
MrYeti, я бы сделал так:
Массивов должно быть два - в одном хранятся элементы матрицы, числа, в другом ссылки на текстовые поля. 1. Получаем от пользователя базис. 2. Соответственно, понимаем какое количество переменных нужно создать и становится понятной размерность матрицы. Я не знаю как принимается это решение, но, вероятно, вы знаете как. 3. Создаете в цикле нужное количество текстовых полей (например для 6х5 = 30 полей.) Позиционируете их, добавляете в дисплейлист, затем ссылки на текстовые поля кладете в массив для текстовых полей. 4. Создайте какую-нибудь кнопку "Ок". Пользователь должен заполнить все поля, а потом нажать "Ок". 5. Когда все поля заполнены и пользователь нажал "Ок" - в цикле перебираем массив с текстовыми полями и читаем из них данные и кладем в ваш массив содержащий элементы матрицы myMatrix.push = Number (myTextFields[i].text). Желательно проверять по ходу дела, что вы читаете, чтобы не было незаполненных полей и т.п. Массив данных матрицы получается одномерный, но зная размерность матрицы вполне можно вынуть оттуда данные в том порядке как вам надо. 6. Удаляете все текстовые поля воспользовавшись массивом в котором вы сохранили на них ссылки removeChild(myTextFields[i]); 7. Считаете то, что вам надо используя массив с полученными данными myMatrix. 8. Если надо считать снова - повторяете процесс сначала. |
|
|||||
|
Регистрация: Mar 2009
Сообщений: 37
|
В теории то я тоже так думал, но вот 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]=что-нибудь; |
|
|||||
|
Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
|
Цитата:
var srt:String // тут наша строка, которую вы задали с переносами строк и всякое такое var rows:Array = str.split('\n'); // разделили строку по символу переноса while(rows.length) { var columnValues:String = rows.shift(); var columns:Array = columnValues.split(',') // разделили на кусочки по запятой while(columns.length) { trace('row #'+rows.length+' column #'+columns.length+' value='+columns.shift()); } }
__________________
#flasher@irc.trg.ru:6667 Последний раз редактировалось Obi; 28.03.2010 в 00:54. |
|
|||||
|
Регистрация: Mar 2010
Сообщений: 5
|
по п.2 Мне кажется что зависимость такая:
n // сюда вы кладете то что ввел пользователь var xnum:int = n+1;//число элементов по горизонтали var ynum:int = n;//число элементов по вертикали var totalNum:int = xnum * ynum; //общее число переменных n = 5 -> 6 * 5 = 30 Оно? по п.3: |
|
|||||
|
Регистрация: Mar 2009
Сообщений: 37
|
Так можно создать текстовые поля, но их идентификатор будет 1 tf, так что не получится.
Сейчас пробую как Obi предложил. Вродь должно получиться... |
|
|||||
|
[+1 19.06.10]
[+1 27.07.10] Регистрация: Aug 2009
Адрес: UTC+2
Сообщений: 353
|
Цитата:
вопрос, на сколько я понял, не в том, как их создавать, а в том, как к ним потом обращаться. предлагаю способ, когда каждый элемент вашей матрицы будет помещен в объект Object, который мы снабдим парой свойств i и j - координатами (для случая двумерной матрицы) и текстовым полем для ввода значения var matrix : array = new Array(); // массив будет содержать все элементы матрицы вне зависимости от размерности var singleElement : Object = new Object(); // объект элемента матрицы var elementInput : TextField = new TextField(); // текстовое поле для ввода значения элемента singleElement.i = ... // присваиваем горизонтальный индекс элементу матрицы (например, равный счетчику соответствующего цикла singleElement.j = ... // вертикальный идекс singleElement.input = elementInmput; // singleElement.input.x = ... // позиционируем текстовое поле singleElement.input.y = ... // позиционируем текстовое поле addChild(singleElement.input) // вводим его в список отображения matrix.push(singleElement); // "складируем" элемент матрицы в линейный массив линейный массив будет удобен, поскольку изначально размерность вашей матрицы неизвестна. каждый элемент линейного массива хранит в себе его координаты в вашей матрице (i,j) и текстовое поле для ввода значения вообще, как мне кажется, лучше использовать универсальную схему, которой пофигу размерность. для ввода значений использовать одно текстовое поле и несколько полей для ввода координаты элемента матрицы. целевой Object в который мы будем складывать все, будем хранить координату элемента. А все объекты будем складывать в линейный массив, чтобы потом иметь возможность работать с любым из элементов матрицы. такая схема будет эластичной , хотя и не очень быстрой при больших размерностях. зато универсальной |
|
|||||
|
Регистрация: Feb 2009
Адрес: Ялта, Севастополь, Одесса
Сообщений: 52
|
var matrix:Array = new Array(); var columns:uint = 3; var rows:uint = 3; for(var i = 0; i<=rows+1; i++){ matrix.push(new Array()); for(var j = 0; j<=columns; j++){ var tf:TextField = new TextField(); tf.type = TextFieldType.INPUT; tf.width = 40; tf.height = 24; tf.x = (j==0) ? 15 : matrix[i][j-1].x + 40 + 5; // x всей матрицы если первый элемент или // x предыдущего поля + ширина предыдущего + интервал tf.y = (i==0) ? 15 : matrix[i-1][j].y + 24 + 5; //аналогично для y matrix[i].push(tf); addChild(matrix[i][j]); } } ................ for(i in matrix){ for(j in matrix[i]){ trace(matrix[i][j].text); } }
__________________
понимание основ освобождает от необходимости запоминания тысяч фактов Последний раз редактировалось Elser; 31.03.2010 в 01:13. |
![]() |
![]() |
Часовой пояс GMT +4, время: 16:17. |
|
|
« Предыдущая тема | Следующая тема » |
|
|