Форум программистов, компьютерный форум, киберфорум
ActionScript
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/22: Рейтинг темы: голосов - 22, средняя оценка - 4.82
1 / 1 / 0
Регистрация: 29.01.2011
Сообщений: 13
1

Работа со значением переменной между классами

29.01.2011, 11:41. Показов 4461. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем желаю здравствовать!
Помогите мне пожалуйста ответом на такой скорее всего глупый вопрос. Облазил много форумом, спрашивал у разных людей, но толком мне еще не помогли нигде.
Значит проблема заключается в следующем. Я создаю 2 класса. В одном объявляется переменная, присваивается ей какое-то значение и мне значит нужно его отправить в другой класс, в котором моментально должно произойти с этим значением какое-либо вычисление. Я отправку пытаюсь сделать, как описывается в учебнике Мука, но переменная не передается. В чем причина понять не могу, т.к. программа ни на что не ругается. Значит вот мой код:
В главном классе тупо объявляется переменная и я пытаюсь отослать ее значение во 2й класс secondClass:
ActionScript 3
1
2
3
4
5
6
7
8
package bg{
   public class mainClass{
     public function mainClass(){
         var A:secondClass = new secondClass();
         A.ggg(25);
     }
   }
}
Во втором классе значение должно приниматься в функции ggg():
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
package bg{
   public class secondClass{
      private var B:int;
  
      public function secondClass(){
      }
  
      public function ggg(num:int){
         B = num;
         trace(B);
      }
   }
}
Однако трэйс пустой. Мне один знакомый говорит, что скорее всего я просто классы не подключил. Однако я его не понял по телефону, т.к. сделал все тоже самое, как я делал много раз раньше и все у меня отображается, все отлично.
В общем прощу пихнуть меня носом что конкретно не так, чего я не уловил.
И заодно еще вопрос, вообще реально задать отправку значения в другой класс и чтобы функция, которая принимает это значение тут же произвела прописанные в ней действия, без дополнительных каких-нибудь вызовов этой функции или событий?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.01.2011, 11:41
Ответы с готовыми решениями:

Работа между классами
Есть главный класс main.java, есть класс pampam.java, созданный отдельно путем "new"->"Java...

Работа с классами и пересечение их между собой (задача о городах и поездах)
Здравствуйте. Тут попалась в руки задачка, вкратце суть: Есть города, в каждом городе есть...

Найти среднее арифметическое между максимальным значением матрицы и максимальным значением массива
Заданы матрица и массив. Определить среднее арифметическое между максимальным значением элементов...

Символьной переменной next присвоить цифру, следующую за цифрой, являющейся значением символьной переменной dig
помогите пожалуйста. Дана символьная переменная dig, содержащая некоторую цифру. Символьной ...

18
122 / 65 / 4
Регистрация: 12.04.2009
Сообщений: 1,047
29.01.2011, 12:57 2
сходу вужу два ляпа

1) В главнос класе логичнее обьявлять переменную глобально а не в конструкторе.
Тоесть так:
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
 package bg
       {
           public class mainClass
           {
                var A:secondClass = new secondClass();
 
                public function mainClass() 
                {
                    A.ggg(25);
                 }
            }
        }
А самое главное во втором классе. Вот так паметры не передают:

ActionScript 3
1
 public function ggg(num:int){
Уберите присвоение типа!


ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package bg
    {
        public class secondClass
        {
            private var B:int;
   
            public function secondClass()
            {
            }
  
            public function ggg(num)
            {
                 B = num;
                 trace(B);
            }
        }
    }
Если помог то не жадничаем и ставим +1
0
1 / 1 / 0
Регистрация: 29.01.2011
Сообщений: 13
29.01.2011, 13:29  [ТС] 3
Спасибо большое за ответ areostar) Но проблема осталась в силе. Не выводит трэйс в аутпуте.
Прикреплю файлы, может посмотрите и подскажите нубу в чем косяк)
Вложения
Тип файла: rar zoo.rar (6.9 Кб, 28 просмотров)
0
122 / 65 / 4
Регистрация: 12.04.2009
Сообщений: 1,047
29.01.2011, 13:56 4
DWanderer, Вы неправельно создали проект(точнее вообще не создали и компайлер не видет ни первый ни второй класс!!! )

Обьясняю как надо:

1) создаём на компе папку где всё это будем хранить(назавём к примеру Flash Projects)
2) Во флеше создаём .fla и .as файлы(их имена должны быть одиноковы!!!) сначала .as фаил(Это и есть гланый фаил приложения как ваш Firsr_Class) там и надо создавать обьект второго класса!

Только в начале после первой скобки пришпандориваем import flash.display.*;

a после имени класса приписываем extends Sprite;

во .fla на вкладке свойства в окошко Class вписываем имя класса безрасширения!

сохраняем всё в созданую нами папку! во фла файле в меню файл жмём сохранить ещё раз(если у вас CS4 ТО сохранить с уплотнением)

второй клас в туже папку но ничего с ним не делаем

и работаем спокойно!

Мукк для свойх примеров другой средой пользуется! Но навичкам с ней замарачиваться н стоит!

Удачи
1
1 / 1 / 0
Регистрация: 29.01.2011
Сообщений: 13
29.01.2011, 14:19  [ТС] 5
Спасибо огромное! Все заработало и вроде все понял)
0
122 / 65 / 4
Регистрация: 12.04.2009
Сообщений: 1,047
29.01.2011, 14:31 6
Нестоит! Всвоё время больше недели(!!!) на это угорохал!! Помоч чтото никто мне тогда не хотел!
0
1 / 1 / 0
Регистрация: 29.01.2011
Сообщений: 13
29.01.2011, 23:15  [ТС] 7
Я уже дней 5 сижу. Работа на этом и стала. Кто-то если что-то и скажет, то не объяснит толком. Знакомый мой оч давно мне что-то подобное исправил, но не объяснил, так вот опять столкнулся.
На другом форуме меня так вообще обматерил сам модератор, что я мол такой тупой) Ну да ладно.
Есть у меня еще один вопросик по поводу отображения отсчета таймера, чуть позже задам. Надеюсь и с ним поможете)

Добавлено через 7 часов 42 минуты
Еще один вопрос появился. А как правильно можно передать значение 1 переменой 1го класса 2й переменной 2го класса через экземпляр. Опять же делаю по Муку у меня выбивается следующая ошибка:
bg\secondClass.as, Line 6 1178: Attempted access of inaccessible property A through a reference with static type bg:mainClass.

Если я делаю 2ю переменную (которая принимает значение из xml) статической, то все выполняется, но само значение не передается.
0
122 / 65 / 4
Регистрация: 12.04.2009
Сообщений: 1,047
30.01.2011, 06:59 8
Код поглядеть можно!?
0
1 / 1 / 0
Регистрация: 29.01.2011
Сообщений: 13
30.01.2011, 07:43  [ТС] 9
первый класс
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
package bg{
    import flash.display.*;
 
    public class mainClass extends Sprite{
        public var A:int;
        private var C:secondClass;
        public function mainClass(){
            C = new secondClass;
            trace(A);
        }
    }
}
вот второй
ActionScript 3
1
2
3
4
5
6
7
8
9
package bg{
    public class secondClass{
    private var B:mainClass = new mainClass;
    
        public function secondClass(){
            B.A = 25;  //пытаюсь передать через экземпляр B класса secondClass значение 25 переменной A класса mainClass
        }
    }
}
Надеюсь благодаря вам понять уже раз и на всегда всю хитрость системы передачи значений переменных между классами. Как не печально у самого ума не хватает увидеть собственную ошибку и понять всю тонкость действия.

Знакомый мне вчера дал совет делать так:
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package  
{
    import flash.display.Sprite;
    
    public class mainClass extends Sprite
    {
        public var A:int;
        private var C:secondClass;
        
        public function mainClass() 
        {
            C = new secondClass(this);
            trace(A);
        }
    }
}
второй:
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
package  
{
    import mainClass;
    
    public class secondClass
    {
        public function secondClass(obj:mainClass) 
        {
            obj.A = 25;
        }
    }
}
Но мне более удобен метод, который начинает описывать Мук еще в начале своего примера в книге, буквально на странице где-то 50-55й. Подобным отвечали и некоторые люди на других форумах. Вот хочу вникнуть в этот метод и понять почему же не работает у меня.
0
122 / 65 / 4
Регистрация: 12.04.2009
Сообщений: 1,047
30.01.2011, 08:25 10
Если вы всё ещё в том проекте что мы вчера сделали то маинКласс клонировать неполучитья! он привязан к .fla файлу (у мука ещё раз говорю другая среда разработки) Хотя второй ваш вариант кажется верным

Можете создать второй непривязаный класс и попробывать с ними это проделать ещё можно попытаться обьявит переменную А как static

А вообще рекомендую вам мука конечно читать но неповторять как попка всё его примеры а самому выбрать какую нибудь тему и делать! Что непонятно спрашивайте!
0
1 / 1 / 0
Регистрация: 29.01.2011
Сообщений: 13
30.01.2011, 10:11  [ТС] 11
В общем проблема такая. Попытаюсь максимально объяснить что мне надо и почему я хочу понять метод Мука на примере secondClass.

ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package bg{
   public class secondClass{
      private var B:int;
  
      public function secondClass(){
        ggg();  //вызывается для выполнения некоторых операций в порядке очереди
      }
  
      public function ggg(num:int){ // в тоже время для выполнения необходимо перебросить переменную для начала
         B = num;       //однако программа ругается и понятное дело почему
         trace(B);
      }
   }
}
Вопрос как это обойти, как перекинуть значение переменной, не трогая функцию, которая стоит в очереди выполнения?
0
122 / 65 / 4
Регистрация: 12.04.2009
Сообщений: 1,047
30.01.2011, 10:33 12
Но вы же непердали в функцию ничего! а фукция должна принемать параметр! уберите параметр из функции! переменая у вас обьявлена глобално! пользуйте на прямую!
0
1 / 1 / 0
Регистрация: 29.01.2011
Сообщений: 13
31.01.2011, 14:42  [ТС] 13
Решил переписать пример, из-за которого я сталкиваюсь с проблемой передачи значения переменной. Я плохо изложил в прошлом примере ситуацию, так что прошу посмотреть на следующий код:
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package  bg{
    import flash.display.Sprite;
        
    public class mainClass extends Sprite{
        private var vueExperience:TextField = new TextField(); //поле вывода опыта
        private var vueLevel:TextField = new TextField(); //поле вывода уровня
        
        public function mainClass(){
            //загрузка картинки фона
            ....
        }
        public function onCompleteWindow(e:Event):void{
            //отображение картинки фона по завершению загрузки
            
            vueInfoOnWindow (); //выводим инфу на экран
        }
        public function vueInfoOnWindow (){
            vueExperience.text = "Твой опыт: " + secondClass.currentExperiencePHP;
            vueLevel.text = "Твой уровень: " + secondClass.Level;
        }
    }
}
И второй класс, который принимает значение переменных из xml (эти переменные статичны, потому легко их могу передать, однако некоторые мне необходимо пересчитать перед отправкой, т.е. переменная перестает быть статической):
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package bg{
   public class secondClass{
     public static var currentExperiencePHP:int;
     private var currentLevel:int;
     public static var Level:int;
     
      public function secondClass(){
        //загрузка значения currentExperiencePHP из xml
        lvl(); //пересчет уровня взависимости от полученного currentExperiencePHP
        Level = currentLevel; //значение переменной Level необходимо переслать в mainClass
      }
  
      public function lvl(){
        if (currentExperiencePHP < 40){
                currentLevel = 1;
            } else if (currentExperiencePHP > 40, currentExperiencePHP < 60){
                currentLevel = 2;
            } и так далее....
      }
   }
}
В результате компиляции и получается ошибка:
1061: Call to a possibly undefined method lvl through a reference with static type bg:mainClass.
Надеюсь в этот раз все понятно я изложил, очень надеюсь на ваш ответ...
0
108 / 44 / 2
Регистрация: 27.10.2010
Сообщений: 206
31.01.2011, 19:59 14
вообще не понимаю что вы добиваетесь, но если вы хотите в любой момент получить переменную второго класса, просто сделайте на второй класс ссылку в конструкторе первого.
0
1 / 1 / 0
Регистрация: 29.01.2011
Сообщений: 13
31.01.2011, 22:04  [ТС] 15
RaiderSk8 именно получение значения переменной из любого другого класса в любое время я и добиваюсь получить, однако постоянно выбивает одна и та же ошибка, которую я уже приводил. Пока увы не могу понять почему.
0
108 / 44 / 2
Регистрация: 27.10.2010
Сообщений: 206
31.01.2011, 22:51 16
Aclass.as
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
package
{
    import Bclass;
    public class Aclass
    {
        var bclass:Bclass;
        public function connectBclass(_bclass:Bclass):void
        {
            bclass = _bclass;
            trace(bclass);
        }
    }
}
Bclass.as
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
package
{
    import Aclass;
    public class Bclass
    {
        var aclass:Aclass;
        public function Bclass(_aclass:Aclass):void
        {
            aclass = _aclass;
            trace(aclass);
        }
    }
}
вот так их подключай друг к другу
ActionScript 3
1
2
3
4
5
import Bclass;
import Aclass;
var a:Aclass = new Aclass();
var b:Bclass = new Bclass(a);
a.connectBclass(b);
0
1 / 1 / 0
Регистрация: 29.01.2011
Сообщений: 13
09.02.2011, 09:54  [ТС] 17
RaiderSk8 ну по сути вы мне написали то, что уже было до вас написано.
Я же хочу узнать, как правильно передавать значение через экземпляр. Потому что начитавшись, понял, что это возможно, но как, я увы не понимаю. Вернее не понимаю, что я не так делаю.
В классе bg забыл дописать экземпляр 2го класса
ActionScript 3
1
2
3
var myExample:secondClass = new secondClass;
vueExperience.text = "Твой опыт: " + secondClass.currentExperiencePHP;
vueLevel.text = "Твой уровень: " + myExample.Level;
Каким-то образом у меня сейчас переменная стала передаваться (не знаю, я ничего не изменял и нового не добавлял). Но значение равно тому, что я указываю при объявлении переменной Level. Т.е. то значение, которое задается дальше внутри функции в классе secondClass, будто не замечается вовсе. В чем причина понять не могу. В справочнике аналогично все, но значение почему-то передается, которое задается уже внутри функции, у меня же нет.
0
1 / 1 / 0
Регистрация: 29.01.2011
Сообщений: 13
10.02.2011, 13:49  [ТС] 18
Админы, а как закрыть тему?
Спасибо всем, кто откликнулся в ней, я со всем уже разобрался.
0
1354 / 315 / 6
Регистрация: 21.11.2009
Сообщений: 992
10.02.2011, 17:23 19
У обычных пользователей такой возможности нету... Закрывать ее не знаю зачем !
Оффтопиков же нету
0
10.02.2011, 17:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.02.2011, 17:23
Помогаю со студенческими работами здесь

Сортировка списка с классами по переменной в классе
Есть класс, в классе переменная i; Есть лист с классами. Как отсортировать лист по величине i?

Запрет изменения переменной другими классами сборки
Есть некая переменная iV класса V. Как сделать так что бы другие классы сборки ее видели, а...

Взаимодействие между классами
Начал изучать Qt и попутно осваивать ООП. Пока проблем больше со вторым... В учебных целях пишу...

Связь между 2 классами
Есть 2 класса: Class A { private: B** arrayB;/нужно раньше объявить класс И ... }; A*...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru