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

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

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

Регистрация: Apr 2010
Сообщений: 25
По умолчанию Ошибки при изучении книги Колина Мука (2009 год)

Ошибка следующая: Line 57, 1083: Syntax error: else is unexpected.
Кто знает в чём проблема, помогите, пожалуйста.
Чтобы проще найти место ошибки, то она в функции setName, в этой строчке: else if (newName == ""){
После этой строчки идёт комментарий: // ... в противном случае, если заданное...

Код AS3:
package zoo {
	import flash.utils.setInterval;
	import flash.utils.clearInterval;
 
	internal class VirtualPet {
		private static var maxNameLength = 20;
		private static var maxCalories = 2000;
		private static var caloriesPerSeconds = 100;
 
		private var petName;
		private var currentCalories = VirtualPet.maxCalories/2;
		private var digestIntervalID;
 
 
		public function VirtualPet(name) {
			setName(name);
			digestIntervalID = setInterval(digest, 1000);
		}
		public function eat (foodItem) {
 
			// Если это животное мертво
			if (currentCalories == 0) {
				// ... завершить метод, не изменяя значение переменной currentCalories
				trace (getName() + "is dead. You can't feed it.");
				return;
				}
 
		   // Чтобы животные не ели червивые яблоки
			if (foodItem is Apple) {
				if (foodItem.hasWorm()) {
					trace ("The" + foodItem.getName() + "had a worm. " + getName() + " didn't eat it");
					return;
				}
			}
 
			var newCurrentCalories = currentCalories + foodItem.getCalories();
 
			// Если новое предложенное калорий для данного животного больше максимально допустимого значения (то есть 2000)
			if (newCurrentCalories > VirtualPet.maxCalories) {
				// ... то присвоить переменной currentCalories максимальное значение 2000
				currentCalories = VirtualPet.maxCalories;
			}//  в противном случает увеличить значение переменной currentCalories на указанное количество калорий
			else { currentCaloies = newCurrentCalories;
			}
			trace(getName() + "ate some" + foodItem.getName() + "It now has" + currentCalories + "calories remaining");
		}
 
		// Возвращает оставшееся количество калорий у животного
		public function getHunger() {
			return currentCalories/VirtualPet.maxCalories;
		}
		public function setName(newName) {
			// Если длина заданного нового имени больше 20 символов...
			if (newName.length > VirtualPet.maxNameLength) {
				// ... обрезать имя, используя собственный метод String.subst() Возвращающий указанную часть строки на которой выполяется данный метод
				newName = newName.substr(0, VirtualPet.maxNameLength);
				else if (newName == "")	{
					// ... в противном случае, если заданное имя является пустой строкой, завершить выполнение метода не изменяя значения переменной petName
				   return;
				}
				// Присвоить новое проверенное имя переменной petName
				petName = newName;
			}
 
			// Теперь, когда мы объявили переменную petName закрытой, возвращаем значение переменной
			public function getName() {
				return petName;
			}
 
		private function digest() {
			// Если в результате потребления очередной порции калорий значение переменной currentCalories животного станет равным 0 или меньше...
			if (currentCalories - VirtualPet.caloriesPerSecond <= 0) {
				// ... прекратить вызов метода digest()
				clearInterval(digestIntervalID);
				// После чего очистить желудок животного
				currentCalories = 0;
				// и сообщить о смерти животного
				trace (getName() + "has died");
			} else {
				// ...иначе употребить оговоренное количество калорий 
				currentCalories -= VirtualPet.caloriesPerSecond;
				// и сообщить о новом состоянии животного
				trace(getName() + "digest some food. It now has"
					  + currentCalories + "calories remaining");
		}
		}
	}
}

Старый 03.07.2010, 19:24
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Перед else не хватает }. А код - кошмар... неужели это действительно Мук написал такое?..
__________________
Hell is the possibility of sanity

Старый 03.07.2010, 19:41
mayakwd вне форума Посмотреть профиль Отправить личное сообщение для mayakwd Посетить домашнюю страницу mayakwd Найти все сообщения от mayakwd
  № 3  
Ответить с цитированием
mayakwd
 
Аватар для mayakwd

Регистрация: Jul 2008
Адрес: t:2, x: 0.76
Сообщений: 553
Отправить сообщение для mayakwd с помощью ICQ Отправить сообщение для mayakwd с помощью Skype™
Мук пишет последовательного от простого к сложному проще-говоря сначала быдло-код, а далее все приятнее и приятнее
__________________
Блог, Twitter
Брюзга.

Старый 03.07.2010, 21:22
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 4  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Интересно, какой процент дочитывает до конца
__________________
Hell is the possibility of sanity

Старый 03.07.2010, 21:30
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 5  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Код AS3:
if (newName.length > VirtualPet.maxNameLength) {
	// ... обрезать имя, используя собственный метод String.subst() Возвращающий указанную часть строки на которой выполяется данный метод
	newName = newName.substr(0, VirtualPet.maxNameLength);
	else if (newName == "")	{
		// ... в противном случае, если заданное имя является пустой строкой, завершить выполнение метода не изменяя значения переменной petName
		return;
	}
	// Присвоить новое проверенное имя переменной petName
	petName = newName;
}
Ну, если поглядеть внимательнее...то перед else нет }, а после блока else } - лишнее.

Я читал Мука кусочками, сначала начало, отмечал особенности синтаксиса, по сравнению с as1/as2, затем пропуская отдельные главы, возвращаясь к ним только в процессе нужды. Думаю, обычно человек так и поступает, а не читает все подряд, ничего не запоминая оО
__________________
тут я

Старый 03.07.2010, 21:59
armastus вне форума Посмотреть профиль Отправить личное сообщение для armastus Найти все сообщения от armastus
  № 6  
Ответить с цитированием
armastus

Регистрация: Apr 2010
Сообщений: 25
Да спасибо, там не было этой скобочки! Но поставив её появились 3 ошибки, вот так всегда, одну исправляешь, появляется 10
Цитата:
Я читал Мука кусочками, сначала начало, отмечал особенности синтаксиса, по сравнению с as1/as2, затем пропуская отдельные главы, возвращаясь к ним только в процессе нужды. Думаю, обычно человек так и поступает, а не читает все подряд, ничего не запоминая оО
Вынужден с вами не согласиться, потому что во-первых я вообще не знаком с as1 и as2, в книге написано, что до 6 главы включительно лучше не компилировать, иначе может возникнуть куча ошибок, что я и сделал. Да, я иду в подряд, всё читаю и делаю, и конечно же всё не запоминается и возникает куча вопросов, которых естественно автору не задать, как преподавателю онлайн, но я надеюсь большую часть ответов я получу прочитав книгу до конца (возможно не один раз придётся прочитать, чтобы понять) и планирую несколько раз перечитать книгу, находя в ней что-то новое для себя. Другого пути не вижу.... каждый выбирает себе дорогу к знаниям и не только!

Добавлено через 4 минуты
Цитата:
Интересно, какой процент дочитывает до конца
В смысле книгу? Думаю не большой, я сам уже второй раз сначала иду (до 7 главы), многое не понятно, но со второго раза лучше, что-то уже помню, и код кажется ближе и более понятен, что к чему!!!

Старый 03.07.2010, 22:11
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 7  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Я думаю, вряд ли вы не перескочите пару глав, перейдя к визуализации знаний. Там сам автор даже это предлагает. Вряд ли вам понадобится знание о xml, ничего толком не зная о реализации визуального исполнения
__________________
тут я

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

Регистрация: Apr 2010
Сообщений: 25
А вот собственно и ошибки:
1. Line 43, 1120: Access of undefined property currentCaloies.
2. Line 74, 1119: Access of possibly undefined property caloriesPerSecond through a reference with static type Class.
3. Line 83, 1119: Access of possibly undefined property caloriesPerSecond through a reference with static type Class.

Первая ошибка находится перед функцией getHunger, вторая и третья ошибка находятся в функции digest.
Спасибо

Добавлено через 3 минуты
Цитата:
Сообщение от КорДум Посмотреть сообщение
Я думаю, вряд ли вы не перескочите пару глав, перейдя к визуализации знаний. Там сам автор даже это предлагает. Вряд ли вам понадобится знание о xml, ничего толком не зная о реализации визуального исполнения
Да, я когда первый раз читал до 7 главы, он предлагал перескочить, ну если мол вы не знакомы, то сначала ознакомьтесь с той то главой, я перескочил, второй раз не стал этого делать, может дальше и придётся, не знаю, но там видно будет, главное осилить!!!

Старый 03.07.2010, 22:59
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 9  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Собственно, в ошибках все описано, что не так. Нужно caloriesPerSecond сделать public static
__________________
тут я

Старый 04.07.2010, 02:15
armastus вне форума Посмотреть профиль Отправить личное сообщение для armastus Найти все сообщения от armastus
  № 10  
Ответить с цитированием
armastus

Регистрация: Apr 2010
Сообщений: 25
Цитата:
Сообщение от КорДум Посмотреть сообщение
Собственно, в ошибках все описано, что не так. Нужно caloriesPerSecond сделать public static
Спасибо, но ошибки сохранились в книге private static написано.

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

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

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


 


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


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