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

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

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

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
По умолчанию Передача значений из функции, не ссылок

Добрый день.
Написал ф-цию:
Код AS3:
		public function sliceNumbers(str:String):Array {
			var rArr:Array = [];
			rArr[0] = "";
			rArr[1] = "";
			var l:int = str.length;
			for (var i:int = 0; i < l; i += 2) {
				rArr[0] += str.charAt(i);
			}
			for (i = 1; i <= l; i += 2) {
				rArr[1] += str.charAt(i);
			}
			return rArr;
		}
Можно не вникать что он делает, да и неважно это - просто разбивает строку на 2 кучки и возвращает их. Массивом, конечно же.
Теперь по задаче нужно разбить их ещё раз, снова на 2 кучки и так пока не останеться по 1 символу. Ну, это к сути проблемы не относиться, когда я пытаюсь сделать вот это:
Код AS3:
var resultArray:Array=new Array();
var funcRes:Array = sliceNumbers("1234");
resultArray.push(funcRes[0], funcRes[1]);
resultArray.splice(0, 1);
Мне выдают Type Error. Скорее всего, это проблема того, что передаются не значения, а ссылки. Есть способ передать именно значения или выдрать их?

Старый 28.11.2008, 18:19
BoUnd вне форума Посмотреть профиль Отправить личное сообщение для BoUnd Посетить домашнюю страницу BoUnd Найти все сообщения от BoUnd
  № 2  
Ответить с цитированием
BoUnd

Регистрация: Nov 2004
Адрес: Россия, Орел
Сообщений: 17
Отправить сообщение для BoUnd с помощью ICQ
Запуск вашего кода у меня не приводит к возникновению описанной ошибки. А по теме топика можно предложить передавать в функцию переменную в которую будет помещаться результат ее работы.

Старый 29.11.2008, 14:31
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 3  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Гм, действительно. Но если обрабатывать это в другой ф-ции, то:
Код AS3:
package 
{
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.text.TextField;
	import flash.events.MouseEvent;
	public class Main extends MovieClip
	{
		private var inputText:TextField = new TextField();
		private var ok:Sprite = new Sprite();
		public function Main():void {
			addChild(inputText);
			inputText.x = 200;
			inputText.y = 225;
			inputText.text = "32017496";
			addChild(ok);
			ok.x = 200;
			ok.y = 300;
			ok.graphics.beginFill(0xFFFFFF * Math.random(), 1);
			ok.graphics.drawRect(0, 0, 50, 50);
			var okText:TextField = new TextField();
			okText.x = 210;
			okText.y = 315;
			okText.text = "Ok! ;)";
			okText.textColor = 0xFFFFFF * Math.random();
			okText.selectable = false;
			okText.mouseEnabled = false;
			addChild(okText);
			ok.addEventListener(MouseEvent.CLICK, clickHandler);
 
 
 
		}
 
		private function clickHandler(e:MouseEvent):void {
			var funcRes:Array = sliceNumbers(inputText.text);
			var iter:int = 0;
			var resultArray:Array=new Array();
			resultArray.push(funcRes[0], funcRes[1]);	
			resultArray.splice(0, 1);
			var temp:Array = new Array();
			while (resultArray[0].length > 1){
				if (iter++ > 15) {
					trace("Не судьба"); break; return; //мало ли, чтобы не ждать 15 сек
				}
				for (var i:int = 0; i < resultArray.length; i++) {
					funcRes = sliceNumbers(resultArray[i]);
					temp.push(funcRes[0], funcRes[1]);
				}
 
				resultArray.splice(0,1); //error!
				if (temp.length>0) temp.splice(0, temp.length);
			}
 
 
 
 
		}
 
		public function sliceNumbers(str:String):Array {
			var rArr:Array = [];
			rArr[0] = "";
			rArr[1] = "";
			var l:int = str.length;
			for (var i:int = 0; i < l; i += 2) {
				rArr[0] += str.charAt(i);
			}
			for (i = 1; i <= l; i += 2) {
				rArr[1] += str.charAt(i);
			}
			return rArr;
		}
	}
 
}


Последний раз редактировалось Psycho Tiger; 29.11.2008 в 14:35.
Старый 29.11.2008, 14:51
ZlPredator вне форума Посмотреть профиль Отправить личное сообщение для ZlPredator Найти все сообщения от ZlPredator
  № 4  
Ответить с цитированием
ZlPredator

Регистрация: Nov 2008
Сообщений: 65
У меня нету ошибки и в этом коде!

Старый 29.11.2008, 15:12
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 5  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
А на кнопку то нажать пробовал?

Старый 29.11.2008, 15:38
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 6  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Код AS3:
...
var len:Number = resultArray[0].length;
while (len > 1){
...
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 29.11.2008, 16:35
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 7  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
2iNils: да, но если перед входом в цикл len>1 - то из цикла мы уже никогда не выйдем, т.к. перемнную len мы не обновляем. Или она будет работать как ссылка обновляясь? О_о
UPD: эээ... заработало... что то я без идей. Можешь обьяснить, что это было?

Старый 29.11.2008, 18:39
ZlPredator вне форума Посмотреть профиль Отправить личное сообщение для ZlPredator Найти все сообщения от ZlPredator
  № 8  
Ответить с цитированием
ZlPredator

Регистрация: Nov 2008
Сообщений: 65
Цитата:
Сообщение от Psycho Tiger Посмотреть сообщение
А на кнопку то нажать пробовал?
Я имел в виду что нету ошибки там где ты сказал. Exception валится на while.

Цитата:
2iNils: да, но если перед входом в цикл len>1 - то из цикла мы уже никогда не выйдем, т.к. перемнную len мы не обновляем. Или она будет работать как ссылка обновляясь? О_о
Естественно не будет. Твой break сработает =)

Цитата:
UPD: эээ... заработало... что то я без идей. Можешь обьяснить, что это было?
Ты же сам в конце цикла удаляешь единственный элемент массива с помощью splice (перевожу дословно: удалить 1 элемент начиная с индекса 0), второй ты удалил еще до цикла.

Старый 29.11.2008, 19:04
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 9  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Цитата:
Сообщение от ZlPredator
Естественно не будет. Твой break сработает =)
Ну да, но в конечной программе то его не будет =) Там где я сомневаюсь во время написания частенько оставляю подобную конструкцию, ибо ждать 15 секунд мне влом)
Цитата:
Сообщение от ZlPredator
Ты же сам в конце цикла удаляешь единственный элемент массива с помощью splice (перевожу дословно: удалить 1 элемент начиная с индекса 0), второй ты удалил еще до цикла.
Ну, здесь да Этот момент уже набирал на форуме без компиляции, а попробуй вот так? Что здесь не то?
Код AS3:
resultArray=temp;
temp=[];

Старый 29.11.2008, 19:14
ZlPredator вне форума Посмотреть профиль Отправить личное сообщение для ZlPredator Найти все сообщения от ZlPredator
  № 10  
Ответить с цитированием
ZlPredator

Регистрация: Nov 2008
Сообщений: 65
Да ничего... Цикл отработал. Что я должен был увидеть?

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

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

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


 


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


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