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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 15.02.2014, 02:29
Godwarlock вне форума Посмотреть профиль Отправить личное сообщение для Godwarlock Найти все сообщения от Godwarlock
  № 1  
Ответить с цитированием
Godwarlock

Регистрация: Jan 2012
Сообщений: 836
По умолчанию Вычитание и его предел

Код AS3:
var _perem:uint;
var zerozero:Boolean;
 
public function clickBtn(event:MouseEvent):void
	{
		if (zerozero == true)
		{
		_perem -=1;
 
		tex3.myText2.text = _perem.toString();
 
		if (_perem == 0)
		{
			zerozero= false;
 
		}
			}
	}
 
	public function zerozeros()
	{
		{
		if (_perem == 0)
		{
			zerozero = false;
 
		}
		if (_perem > 0)
		{
			zerozero = true;
 
		}
		}
Объясняю суть. Есть переменная, например её значение целое число "10". При нажатии на кнопку, из целого числа переменной _perem вычитается целое число 1, лишь в том случае, если переменная zerozero = true. Если переменная zerozero = false, то бишь равно 0, то по нажатию кнопки ничего не вычитается. Работает. Но проблема теперь в другому, если изначально в переменной _perem было целое число равное например 50, а _perem -=1; вычитает не 1, а 1000, то трейс выводит 9 значное число, при котором переменная zerozero автоматически принимает true и можно продолжать вычитать по косарю из этого шестизначного числа. Как избежать подобного? Чтобы можно было вычесть 1000, но при этом переменная _perem дальше нуля не уходило

Старый 15.02.2014, 02:48
belv вне форума Посмотреть профиль Отправить личное сообщение для belv Найти все сообщения от belv
  № 2  
Ответить с цитированием
belv
[+1 16.07.13]
[+4 16.07.13]

Регистрация: Oct 2005
Сообщений: 217
Давайте исходник, судя по предыдущим темам, не все так просто у Вас. И избавьтесь от повторных скобок
Код AS3:
public function zerozeros()
	{
		{ // это не правильно 
		if (_perem == 0)
		{
			zerozero = false;
 
		}
		if (_perem > 0)
		{
			zerozero = true;
 
		}
		}

Старый 15.02.2014, 02:55
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 3  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
1)
Цитата:
if (zerozero == true)
"Если коза равна козе, то коза, и раз уж коза, то...." Вот такой примерно смысл этой вроде бы короткой записи, абсолютно идентичной по результату записи if (zerozero).
То, что в скобках, называется выражение. Выражение после if всегда имеет тип Boolean. Так вот ваша переменная zerozero УЖЕ типа Boolean. Если zerozero=true, то (true == true) вернет то же самое true, если false, то (false == true) вернет все то же false. То есть результат выражения (zerozero == true) всегда идентичен zerozero. К чему лишние вычисления?
2) Когда Вы научитесь нормально ставить скобки? Абсолютно непонятно что Вы ими выделяете в блоки и зачем.
Код AS3:
	public function zerozeros()
	{
		{
		if (_perem == 0)
		{
			zerozero = false;
 		}
Что означает вторая скобка, перед if?
Цитата:
Чтобы можно было вычесть 1000, но при этом переменная _perem дальше нуля не уходило
Код AS3:
_perem = Math.max(0, _perem - 1000);
__________________
Reality.getBounds(this);

Старый 15.02.2014, 02:55
bav вне форума Посмотреть профиль Отправить личное сообщение для bav Найти все сообщения от bav
  № 4  
Ответить с цитированием
bav
 
Аватар для bav

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
Смотрите, простой эксперимент.
Код AS3:
var n:uint = 3;
n -= uint.MAX_VALUE;
trace(n); // 4
То есть после вычитания чего-либо (положительного) из переменной типа uint определить переполнение можно путем сравнения старой и новой величин.

Старый 15.02.2014, 03:01
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 5  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
вычитает не 1, а 1000, то трейс выводит 9 значное число
Ну, если Вы приводите результат к uint, то конечно. Ведь uint не может быть отрицательным, в этом сама его суть. Вот только не 9-ти, а 10-тизначное. Посчитаем? 4 294 966 346
__________________
Reality.getBounds(this);

Старый 15.02.2014, 03:08
Godwarlock вне форума Посмотреть профиль Отправить личное сообщение для Godwarlock Найти все сообщения от Godwarlock
  № 6  
Ответить с цитированием
Godwarlock

Регистрация: Jan 2012
Сообщений: 836
Wolsh, bavБлагодарствую))
Цитата:
2) Когда Вы научитесь нормально ставить скобки? Абсолютно непонятно что Вы ими выделяете в блоки и зачем.
С этого момента, не знаю как она там оказалась, в подобных ф-циях нет вторых скобок))))

Старый 15.02.2014, 03:10
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 7  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Цитата:
Ведь uint не может быть отрицательным, в этом сама его суть.
Читаю и не могу удержаться от слов - где Вы были раньше

Старый 15.02.2014, 03:28
belv вне форума Посмотреть профиль Отправить личное сообщение для belv Найти все сообщения от belv
  № 8  
Ответить с цитированием
belv
[+1 16.07.13]
[+4 16.07.13]

Регистрация: Oct 2005
Сообщений: 217
В предыдущих кодах скобки чуть-ли не везде присутствуют. Я вас не обманываю, мне Вы уже 3 раза говорили,что сказал правду)))

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

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

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


 


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


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