Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Ошибки при изучении книги Колина Мука (2009 год) (http://www.flasher.ru/forum/showthread.php?t=141742)

armastus 03.07.2010 18:35

Ошибки при изучении книги Колина Мука (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");
                }
                }
        }
}


wvxvw 03.07.2010 19:24

Перед else не хватает }. А код - кошмар... неужели это действительно Мук написал такое?..

mayakwd 03.07.2010 19:41

Мук пишет последовательного от простого к сложному проще-говоря сначала быдло-код, а далее все приятнее и приятнее

wvxvw 03.07.2010 21:22

Интересно, какой процент дочитывает до конца :)

КорДум 03.07.2010 21:30

Код 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, затем пропуская отдельные главы, возвращаясь к ним только в процессе нужды. Думаю, обычно человек так и поступает, а не читает все подряд, ничего не запоминая оО

armastus 03.07.2010 21:59

Да спасибо, там не было этой скобочки! Но поставив её появились 3 ошибки, вот так всегда, одну исправляешь, появляется 10
Цитата:

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

Добавлено через 4 минуты
Цитата:

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

КорДум 03.07.2010 22:11

Я думаю, вряд ли вы не перескочите пару глав, перейдя к визуализации знаний. Там сам автор даже это предлагает. Вряд ли вам понадобится знание о xml, ничего толком не зная о реализации визуального исполнения :)

armastus 03.07.2010 22:22

А вот собственно и ошибки:
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 минуты
Цитата:

Сообщение от КорДум (Сообщение 919707)
Я думаю, вряд ли вы не перескочите пару глав, перейдя к визуализации знаний. Там сам автор даже это предлагает. Вряд ли вам понадобится знание о xml, ничего толком не зная о реализации визуального исполнения :)

Да, я когда первый раз читал до 7 главы, он предлагал перескочить, ну если мол вы не знакомы, то сначала ознакомьтесь с той то главой, я перескочил, второй раз не стал этого делать, может дальше и придётся, не знаю, но там видно будет, главное осилить!!!

КорДум 03.07.2010 22:59

Собственно, в ошибках все описано, что не так. Нужно caloriesPerSecond сделать public static

armastus 04.07.2010 02:15

Цитата:

Сообщение от КорДум (Сообщение 919718)
Собственно, в ошибках все описано, что не так. Нужно caloriesPerSecond сделать public static

Спасибо, но ошибки сохранились :( в книге private static написано.

VVall 04.07.2010 02:21

Внимательность надо развивать. Все ваши ошибки в этой теме от неё, точнее от её недостатка. Посмотрите как следует на имена переменных в ошибках и в вашем коде.

armastus 04.07.2010 02:50

Цитата:

Сообщение от VVall (Сообщение 919746)
Внимательность надо развивать. Все ваши ошибки в этой теме от неё, точнее от её недостатка. Посмотрите как следует на имена переменных в ошибках и в вашем коде.

Огромнейшее спасибо, нашёл ещё несколько ошибок по своей невнимательности, по-мимо этих 3-х, сейчас всё работает:yahoo:. Раз уж мы заговорили про внимательность, как её развивать? :) или как её развиваете вы? :)

VVall 04.07.2010 03:13

Специально я никак не развивал - но постоянная практика написания-отладки самого разного кода и работа с пиксельной графикой дают эффект. А так есть всякие полезные игры - нахождение отличий, открывание пар карт, или вот такое.

armastus 04.07.2010 03:16

Может в вашем случае это уже опыт?)) Спасибо большое за ссылку, обязательно почитаю!

Furinax 04.07.2010 11:28

Цитата:

Сообщение от armastus (Сообщение 919713)
А вот собственно и ошибки:
Да, я когда первый раз читал до 7 главы, он предлагал перескочить, ну если мол вы не знакомы, то сначала ознакомьтесь с той то главой, я перескочил, второй раз не стал этого делать, может дальше и придётся, не знаю, но там видно будет, главное осилить!!!

Лучше после того, как 1 раз прочитаете Мука целиком и еще 1 раз прочитаете первые 6 глав - сразу переходите на прочтение рецептов. Там все гораздо ближе к практике. После прочтения рецептов - читаете Мука еще раз с самого начала и все, на уидвление, становится довольно понятным.

armastus 04.07.2010 15:10

Цитата:

Сообщение от Furinax (Сообщение 919767)
Лучше после того, как 1 раз прочитаете Мука целиком и еще 1 раз прочитаете первые 6 глав - сразу переходите на прочтение рецептов. Там все гораздо ближе к практике. После прочтения рецептов - читаете Мука еще раз с самого начала и все, на уидвление, становится довольно понятным.

Спасибо большое за предложение, так и сделаю!


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

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