Лучшие способы учить новичка к программе? [закрытый]

Что такое NullPointerException?

Хорошим местом для начала является JavaDocs . Они охватывают это:

Брошено, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  • Вызов метода экземпляра нулевого объекта.
  • Доступ или изменение поля нулевого объекта.
  • Выполнение длины null, как если бы это был массив.
  • Доступ или изменение слотов с нулевым значением, как если бы это был массив.
  • Бросать нуль, как если бы это было значение Throwable.

Приложения должны бросать экземпляры этого класса для указания других незаконных видов использования нулевого объекта.

blockquote>

Также, если вы попытаетесь использовать нулевую ссылку с synchronized, который также выдаст это исключение, за JLS :

SynchronizedStatement:
    synchronized ( Expression ) Block
  • В противном случае, если значение выражения равно null, NullPointerException.
blockquote>

Как это исправить?

Итак, у вас есть NullPointerException. Как вы это исправите? Возьмем простой пример, который выдает NullPointerException:

public class Printer {
    private String name;

    public void setName(String name) {
        this.name = name;
    }

    public void print() {
        printString(name);
    }

    private void printString(String s) {
        System.out.println(s + " (" + s.length() + ")");
    }

    public static void main(String[] args) {
        Printer printer = new Printer();
        printer.print();
    }
}

Идентифицирует нулевые значения

. Первый шаг - точно определить , значения которого вызывают исключение . Для этого нам нужно выполнить некоторую отладку. Важно научиться читать stacktrace . Это покажет вам, где было выбрано исключение:

Exception in thread "main" java.lang.NullPointerException
    at Printer.printString(Printer.java:13)
    at Printer.print(Printer.java:9)
    at Printer.main(Printer.java:19)

Здесь мы видим, что исключение выбрано в строке 13 (в методе printString). Посмотрите на строку и проверьте, какие значения равны нулю, добавив протоколирующие операторы или используя отладчик . Мы обнаруживаем, что s имеет значение null, а вызов метода length на него вызывает исключение. Мы видим, что программа перестает бросать исключение, когда s.length() удаляется из метода.

Трассировка, где эти значения взяты из

Затем проверьте, откуда это значение. Следуя вызовам метода, мы видим, что s передается с printString(name) в методе print(), а this.name - null.

Трассировка, где эти значения должны быть установлены

Где установлен this.name? В методе setName(String). С некоторой дополнительной отладкой мы видим, что этот метод вообще не вызывается. Если этот метод был вызван, обязательно проверьте порядок , что эти методы вызывают, а метод set не будет называться после методом печати. ​​

Этого достаточно, чтобы дать нам решение: добавить вызов printer.setName() перед вызовом printer.print().

Другие исправления

Переменная может иметь значение по умолчанию setName может помешать ему установить значение null):

private String name = "";

Либо метод print, либо printString может проверить значение null например:

printString((name == null) ? "" : name);

Или вы можете создать класс, чтобы name всегда имел ненулевое значение :

public class Printer {
    private final String name;

    public Printer(String name) {
        this.name = Objects.requireNonNull(name);
    }

    public void print() {
        printString(name);
    }

    private void printString(String s) {
        System.out.println(s + " (" + s.length() + ")");
    }

    public static void main(String[] args) {
        Printer printer = new Printer("123");
        printer.print();
    }
}

См. также:

Я все еще не могу найти проблему

Если вы попытались отладить проблему и до сих пор не имеете решения, вы можете отправить вопрос для получения дополнительной справки, но не забудьте включить то, что вы пробовали до сих пор. Как минимум, включите stacktrace в вопрос и отметьте важные номера строк в коде. Также попробуйте сначала упростить код (см. SSCCE ).

324
задан 34 revs, 8 users 58% 24 November 2011 в 00:03
поделиться

81 ответ

Этот поток очень полезен для меня как новичок (> 100 строк кода) программист.

На основе того, чем я был через, как только я закончил с "Привет Мир", и переместитесь в переменные и "если/еще" оператор, я был убит со слишком большим количеством синтаксиса; не зная, что сделать с ними.

Так с интересным простым проектом, я мог бы разбудить свой интерес снова. Существует довольно много предложений проекта здесь.

я могу задать вопросы здесь?

лучше изучить язык сценариев как Автогорячая клавиша сначала?

Редактирование: [Justin Standard]

я думаю, узнавая, что что-то макробазировалось как Автогорячая клавиша, только поможет минимально. Попытайтесь учить "реальный" язык программирования сначала. Самые легкие для начала работы с (по словам большинства людей) python и рубин . Я одобряю Python, но оба довольно просты. Существует также полное сообщение stackoverflow , который отвечает на вопрос который язык запуститься с.

0
ответ дан 4 revs, 2 users 67% 23 November 2019 в 00:53
поделиться

Что-то для рассмотрения... не все способны к программированию:

Некоторые люди просто не могут закончить вещи как:

А = 1

B = 2

А = B

(эти люди будут все еще думать = 1)

Jeff говорил об этом также. На самом деле, мой пример находится в ссылке (и объяснил, для начальной загрузки).

0
ответ дан Ja7on 23 November 2019 в 00:53
поделиться

Это может казаться странным, но я начал писать код путем автоматизации задач и анализа данных в моем прежнем задании. Это было выполнено путем записи тогда изучения кода сгенерированный макрос Excel. Конечно, этот подход предполагает, что можно учиться через VB.

0
ответ дан deadbug 23 November 2019 в 00:53
поделиться

Один я использовал со своими детьми, CEEBot. Это не Python, но это преподает C / программирование стиля Java в забаве, программирующем робот виде игры. Это нацелено на 10-15 лет, но это - действительно хорошее.

0
ответ дан GrizzlyGuru 23 November 2019 в 00:53
поделиться

Мой личный опыт отшатнулся в элементарном Писателе Логотипа использования (который способом развился в Царапину), допустил, что я был маленьким ребенком и компьютерами, где не столь потрясающий, как они в наше время, но в настоящее время это заняло мне места, я не был прежде... Я думаю, что это - то, как я был сцеплен в бизнесе... Я мог сказать, что именно эти первые впечатления на основе такой простоты и прохлады сделали товары, которые вонзаются в мою голову для жизни. Это - то, как основы в обучении программирования должны преподаваться... простой процесс, который тоскует волшебство.

Назад к моему первому CS 101, я запустил с понятий того, чем алгоритм был путем создания Пьяного рассвета (пошаговый процесс, который мог быть повторен в любое время с правильными компонентами, которые приведут к тому же выводу), оттуда мы идем дальше к основной Схеме использования математических функций (как EHaskins, говорил... начинают с малого и затем растут), и оттуда к понятиям циклов, Булевой логики, структур и затем встраивающий в понятие объектов и некоторого выполнения моделирования...

Одна из хороших вещей об этом подходе - то, что язык не был целью, но просто инструментом в процессе изучения понятий и основ программирования (точно так же, как операторы, функции и еще находятся в математике).

, по моему скромному мнению, изучение основ программирования и создания основы является, вероятно, лучшей вещью, которую Вы могли преподавать Вашему брату, когда-то цель покрыта тогда, можно идти дальше на язык более общего использования как Python и преподавать им более высокие понятия как архитектура, и шаблоны разработки (сделайте их естественными в процессе, таким образом, он получит использование к хорошим методам с ранних стадий и будет рассматривать их как часть процесса)..., мы далеки от перестраивания теплой воды, но мы всегда должны запускать путем создания огня.

Оттуда на небе предел!

0
ответ дан 2 revs, 2 users 91% 23 November 2019 в 00:53
поделиться

Я соглашаюсь с Leac. Я на самом деле играю с Царапина иногда, если я скучаю. Это - симпатичный забавный визуальный способ посмотреть на код.

то, Как это работает, они дают Вам набор "блоков" (они похожи на legos), который можно сложить. И путем укладки этих блоков и взаимодействия с холстом (куда Вы помещаете свои спрайты, графику), можно создать игры, фильмы, слайд-шоу..., это действительно интересно.

, Когда это завершено, можно загрузить его право на веб-сайты Царапины, которое является порталом выхода YouTube для приложений Царапины. Не только, что, но и можно загрузить любое представление на веб-сайте, и извлечь уроки из или расширить другие приложения Царапины.

0
ответ дан Kevin 23 November 2019 в 00:53
поделиться

Я соглашаюсь с superjoe30 выше, но у меня нет достаточной репутации все же для отъезда комментария.

я был преподавателем C.S. в течение 4 лет. Языки были Основными, и затем Паскаль, но действительно не имеет значения, каков язык.

самый большой урок я учился, как новый профессор был, неважно, как простой я думал, что понятие было, это не просто новичку. Никогда не идите немного быстрее, чем Ваш студент может пойти. Я не могу подчеркнуть что достаточно. Пойдите действительно, действительно замедлитесь.

я запустил бы с очень простого материала, считать и распечатать, возможно, простое вычисление, только привыкнуть студента для вставления чего-то и вывода чего-то. Тогда операторы IF. Тогда действительно простой ДЛЯ циклов, всегда с точки зрения чего-то студент мог записать и иметь некоторую забаву с.

Тогда я провел бы приблизительно 3 недели, уча очень простому виду машинного языка для фальшивой десятичной машины под названием SIMPL, что Вы могли одноэтапный. Причина того, чтобы сделать это так студент видел, где "резина встречает дорогу", что компьютеры делают постепенные вещи, и это имеет значение, в чем происходят вещи порядка. Без того, что, студенты склонны думать, что компьютер может отсортировать прочитанных их мысли и сделать все внезапно.

Затем обратно к Основному. Пара недель на массивах, потому что, который является большим ударом скорости. Тогда последовательные файлы, который является другим ударом скорости. То, что я подразумеваю "под ударом скорости", является студентом, может приплывать вдоль того, чтобы чувствовать себя вполне уверенно, и затем Вы поражаете их понятием как массивы, и они полностью потеряны снова, пока Вы не упрощаете их через него.

Затем с теми навыками под их поясами, я сделал бы, чтобы они выбрали проект термина, потому что, именно это делает программирование интересным. Без использования для него это действительно скучно. Я предложил бы множество проектов, таких как игры, бухгалтерские программы, научные программы, и т.д. Действительно замечательно видеть, что они включаются. Часто они просили бы у меня справку, и это является большим, потому что Вы знаете, что они учатся.

, В то время как они делали свои проекты, мы продолжим покрывать более усовершенствованные методы программирования - поиск, сортировка, слияние, как сделать простую базу данных, и т.д.

Удача. Обучение является тяжелой работой, но удовлетворение, когда Вы видите, что студенты растут.

0
ответ дан 4 revs 23 November 2019 в 00:53
поделиться

Microsoft Small Basic является бесплатной основанной на.NET средой программирования, нацеленной, чтобы быть "забавной" средой обучения для новичков. Язык является подмножеством VB.NET и даже содержит объект "Черепахи", знакомый с языка Логотипа. Веб-сайт содержит пошаговое руководство.

0
ответ дан PoppaVein 23 November 2019 в 00:53
поделиться

"Кто Боится C++" Heller

, Мог бы быть стоящий того, чтобы попытаться

0
ответ дан Tim 23 November 2019 в 00:53
поделиться

Некоторая дополнительная информация, которую кто-то мог присоединить к более раннему сообщению Jason Pratt на Alice... а именно, Повествующий вариант Alice.

, Хотя исследование представило целевых школьниц, можно найти отчет записанный Caitlin Kelleher интересный.

0
ответ дан Luther Baker 23 November 2019 в 00:53
поделиться

Я предлагаю" Информатика, Отключенная " как дополнительный didactical материал.

0
ответ дан Sergey Kivanov 23 November 2019 в 00:53
поделиться

+1 к лекциям Стэнфордского университета. http://see.stanford.edu/see/courseinfo.aspx?coll=824a47e1-135f-4508-a5aa-866adcae1111

Они просты высокого качества, и я могу ручаться за их способность учить новичков (меня являющийся одним из них).

0
ответ дан Glitch 23 November 2019 в 00:53
поделиться

Независимо от того, что они пишут, сделали, чтобы они ступили через него в отладчик линию за линией на первом показе. Позвольте им , лично убеждаются , что делает компьютер. Это вынимает большую тайну из вещей, уменьшает запугивание ("о, каждая строка действительно настолько проста!"), и помогает им освоить навыки отладки и распознать, почему распространенные ошибки распространены (и почему они - ошибки)

0
ответ дан Seth Morris 23 November 2019 в 00:53
поделиться

Безотносительно языка и среды Вы выбираете, если студент хочет учиться по профессиональным причинам или сделать "реальное" программирование (независимо от того, что это), сделайте, чтобы они запустились путем записи их программ начинающего <глоток> 1 на бумаге и устранения их для выполнения. Возвратитесь с выводом и/или ошибочными результатами и сделайте, чтобы они закрепили вещи на бумаге.

Это не особенно более твердо сначала, чем выполнение его на экране и удар выполнения, но это сделает вещи намного легче, когда они начнут обнаруживать замечательный мир ошибок.

1) короткий, "Привет, Мир!" - вводят программы, которые все еще имеют некоторую логику и/или вычисления, сделайте это до нескольких программ, которые могут иметь ошибки

0
ответ дан Seth Morris 23 November 2019 в 00:53
поделиться

Ваш вопрос вполне зависит от возраста и образования Вашего брата, но если бы он - ребенок/подросток, я рекомендовал бы сделать некоторое программирование GUI или графическое программирование сначала (с Холстом и т.д.). Это выглядит хорошим, и у Вас есть непосредственные результаты. Алгоритмы являются скучными, и слишком абстрактными для молодых людей (прежде чем скажут 15 лет).

, Когда я начал программировать на Спектре ZX (я был похож на 12 лет), мне понравилось тянуть различные вещи на экране, и это было все еще интересно. Я не узнал о реальных алгоритмических методах, пока мне не было, возможно, 18 лет. Не будьте вводят в заблуждение, то такое "простое" программирование является неправильным запуском; интерес человека, изучающего его, является самой важной частью его.

Так, я изучил бы PyKDE, PyGTK, PyQt или Python + OpenGL (существуют, конечно, некоторые учебные руководства в сети, я знаю о некоторых чешских, но это не поможет Вам:)).

, Конечно, если Ваш брат старше и имеет образование близко к математике, можно направиться непосредственно в алгоритмы и такой.

0
ответ дан J S 23 November 2019 в 00:53
поделиться

Я рекомендовал бы , Думают Python .

0
ответ дан user11495 23 November 2019 в 00:53
поделиться

Несколько других стартовых платформ:

  • А хороший программируемый калькулятор (это - то, на чем я учился назад в 70-х) и HP25 тогда HP41, теперь TI69, и т.д.
  • Интерактивные платформы Беллетристики, как "Сообщают 7", обеспечивают другой угол на целой вещи
  • Flash/ActionScript

, Все они отличаются и привлечение, и любой из них мог бы зажечь вид интереса, который требуется, чтобы получать новичка и выполнение.

LBB

0
ответ дан leeborkman 23 November 2019 в 00:53
поделиться

Как непрограммист самостоятельно, я нашел книгу, "Как Программировать" от Прагматически настроенных Программистов, очень услужливых с элементарной точки зрения. Это доступно и легко читать для новичка. Это не возьмет Вас от новичка эксперту, но это подготовит Вас к тому, что сделать, как только Вы выбираете язык и берете Ваше первое, "Учатся Программе в (язык здесь)" книга.

0
ответ дан BrewinBombers 23 November 2019 в 00:53
поделиться

Наличие небольших, доступных целей является одним из самых больших способов освоить любой навык. Программирование не отличается. Python является большим языком для запуска с того, потому что это легко учиться, убрать и может все еще сделать усовершенствованные вещи. Python только ограничен Вашим воображением.

Один способ действительно получить кого-то заинтересованного состоит в том, чтобы дать им маленькие проекты, которые они могут сделать через час или около этого. Когда я первоначально начал изучать Python я играющий Гольф Кода . У них есть много маленьких проблем, которые помогут преподавать основы программирования. Я рекомендовал бы просто пытаться решить одну из проблем день и затем играть с изученными понятиями. Необходимо сделать обучение программировать забаву, или интерес будет потерян очень быстро.

0
ответ дан David Lambert 23 November 2019 в 00:53
поделиться

Сначала я интересовался тем, как различные программы работали, таким образом, я запустил путем рассмотрения исходного кода. Тогда, когда я начал понимать, как программа работала, я изменю определенные параметры для наблюдения то, что произошло бы. Так в основном я изучил, как читать, прежде чем я изучил, как записать. Который одновременно является, как большинство людей учит английский язык.

Поэтому, если бы я пытался преподавать кого-то, как программировать, я дал бы им небольшую программу, чтобы попытаться считать и понять, как она работает, и имейте их, просто просто играют вокруг с исходным кодом.

Только тогда был бы я давать им "присвоения", чтобы попытаться выполнить.

Теперь, если у них была конкретная причина желания изучить, как программировать, это, конечно, будет хорошая идея запуститься с чего-то вроде того, что они хотят выполнить. Например, если бы они хотели быть опытными в приложении как блендер , это определимо была бы хорошая идея запуститься с Alice.

я абсолютно рекомендовал бы придерживаться языка, который имеет сборку "мусора", как D, Perl или некоторый интерпретируемый язык как JavaScript. Это могла бы быть хорошая идея избегать Perl до , Perl 6 ближе к завершению, потому что это фиксирует некоторые трудности чтения и понимания Perl.

0
ответ дан 2 revs, 2 users 97% 23 November 2019 в 00:53
поделиться

Используйте аналогии из реального мира и воображаемых персонажей, чтобы научить их программированию. Например, когда я учу людей переменным, операторам управления и т. Д.

Обычно я начинаю с примера с калькулятором. Я говорю: представьте, что у вас есть коробка для каждой переменной, и у вас есть 10 карточных досок с напечатанными на них числами от 0 до 9. Скажем, что в коробке может быть по одному картону, и аналогичные способы объяснить, как работают элементы программирования

И акцент на том, как работает каждый оператор ... например, простой оператор '=' всегда сначала вычисляет правую часть в одно значение. и поместите это значение в поле с именем "num_1" (которое является именем переменной)

Это было очень и очень эффективно, поскольку они могут очень быстро представить себе поток.

0
ответ дан 23 November 2019 в 00:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: