Вход

Просмотр полной версии : Действие с циклами и массивами


Sparrow_Dreamer
30.04.2015, 23:23
Доброго времени суток! Я только начинаю изучать флеш, сильно не ругайтесь на мои глуповатые вопросы.
Суть такова.
Хочу создать массив с определенным количеством значений (текстовых). И есть текстовое поле для ввода данных. Нам необходимо проверять значение текстового поля, сверяя с каждым элементом массива. В зависимости от результата (равно - 1 балл, не равно - 0 баллов) сохранять значение в переменную.
Т.е. ,есть массив

var s_zn: Array = ['padres', 'pariente', 'abuelo', 'abuela'];
И, я не пойму как создать цикл проверки введенных данных в текстовое поле.

Есть готовый рабочий код, через if-ы:
import flash.ui.Mouse;
import flash.events.MouseEvent;

stop();

var resultat: Number = 0;
var resultat1:Number = 0;
var padres: String = 'padres';
var pariente1: String = 'pariente';
end.visible = false;
pariente.visible = false;
txt1name.visible = false;
proverka1.visible = false;
gomenu.addEventListener(MouseEvent.CLICK, fl_ClickToGoToWebPage_2);
function fl_ClickToGoToWebPage_2(event:MouseEvent):void
{
gotoAndStop(1);
}

proverka.addEventListener(MouseEvent.CLICK, tio);
function tio (event:MouseEvent):void
{
if (txtname.text == padres) {
resultat += 1;
trace(resultat);
end.visible = false;
padrees.visible = false;
txtname.visible = false;
proverka.visible = false;
pariente.visible = true;
txt1name.visible = true;
proverka1.visible = true;
}
else {
resultat = 0;
padrees.visible = false;
txtname.visible = false;
proverka.visible = false;
pariente.visible = true;
txt1name.visible = true;
proverka1.visible = true;
resultat = 0;
trace(resultat);
}
}
proverka1.addEventListener(MouseEvent.CLICK, tio1)
function tio1 (event:MouseEvent):void {
if (txt1name.text == pariente1) {
resultat1 = resultat + 1;
end.visible = true;
end.text = 'Поздравляем! Ваш результат ' + resultat1 + '/2';
img.visible = false;
vvod.visible = false;
padrees.visible = false;
txtname.visible = false;
proverka.visible = false;
pariente.visible = false;
txt1name.visible = false;
proverka1.visible = false;
txtname1.visible = false;
trace(resultat1);
}
else {
end.text = 'Поздравляем! Ваш результат ' + resultat1 + '/2';
vvod.visible = false;
img.visible = false;
end.visible = true;
txtname1.visible = false;
padrees.visible = false;
txtname.visible = false;
proverka.visible = false;
pariente.visible = false;
txt1name.visible = false;
proverka1.visible = false;
trace(resultat1);
}
}

Извиняюсь за плоховатый код, за лишние переменные и вообще за мусор в коде, я новичок))

Плохо понимаю, как можно сделать цикл. Гуглил, но толкового не нашел.

callme
01.05.2015, 09:24
Проверить все элементы массива можно так:
for (var i:int = 0; i < s_zn.length; i++)
{
if (s_zn[i] == 'blabla')
{
resultat = resultat + 1;
}
}

Можете еще это почитать
http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/Array.html

Sparrow_Dreamer
01.05.2015, 17:32
Не понимаю всего кода(
if (s_zn[i] == 'blabla')
Почему здесь [i], а не число элементов в круглых скобках? И что за текст 'blabla'?

Добавлено через 9 минут
var s_zn: Array = ['padres', 'pariente', 'abuelo', 'abuela'];
var resultat: Number = 0;
button.addEventListener(MouseEvent.CLICK, fl_MouseClickHandler);
function fl_MouseClickHandler(event:MouseEvent):void
{
for (var i:int = 0; i < s_zn.length; i++)
{
if (txtname == s_zn[i])
{
resultat ++;
trace(resultat);
}
else {
trace(resultat);
}
}
}

Таким образом трейсит четыре нуля. А мне же надо что-то типа "проверяем, введено ли что-то в строку ввода (txtname), если до этого ничего не вводилось, сравниваем с первым значением массива, если вводилось, то сравниваем со значением, которое следует после того, с которым уже сверились".
Т.е. однотипное действие проверки данных и
resultat++;
Буду благодарен за помощь!

callme
01.05.2015, 17:53
Вместо txtname надо txtname.text

Sparrow_Dreamer
01.05.2015, 18:03
Да, помогло, спасибо!
Но тогда в трейсе 4 раза выводится "1". (
Еще раз тыкаю на кнопку - получается что он сравнивает значение с s_zn[0], а не с s_zn[1]. И выдает 4 раза цифру 2.
Прикрепляю файл.
Или еще раз нужно прописать if...?
И так нужное к-во раз?

callme
01.05.2015, 18:36
Может этот код поможет понять как работают циклы.

for (var i:int = 0; i < s_zn.length; i++)
{
trace('i=', i);
if (txtname.text == s_zn[i])
{
resultat ++;
trace('if');
trace(resultat);
}
else {
trace('else');
trace(resultat);
}
}

Sparrow_Dreamer
01.05.2015, 19:08
Не понимаю, почему он трейсит мне ВСЕ, а не результат в зависимости от данных. Трейсит все возможные значения(

artem2033
05.05.2015, 00:55
Потому что у вас длина массива равна 4. Trace, что находиться в цикле, выводит результат равный длине массива. Чтобы он выводил одно значение нужно сделать так:

for (var i:int = 0; i < s_zn.length; i++)
{
if (txtname.text == s_zn[i])
{
resultat ++;
}
}

trace(resultat); //Если нужно вывести один раз значение resultat.