Практические задачи по Java — для курсов и прочих занятий
Практические задачи по Java — для курсов и прочих занятий
Несколько вводных слов
Последние несколько лет я читаю курс по программированию на Java. Со временем он менялся — то добавлялись, то выкидывались разные части, менялась последовательность тем, менялся подход к построению плана самих занятий, и так далее. То есть, курс совершенствовался. Одной из основных проблем, возникших при подготовке курса — это задачи. О них и пойдёт речь.
Дело в том, что каждое моё занятие состоит из двух частей. На первой я выступаю в роли лектора — рассказываю с примерами кода о какой-то новой теме (классы, наследование, дженерики и так далее). Вторая часть — практическая. Очевидно, что нет смысла просто рассуждать о программировании, надо программировать. Приоритет на занятиях — решение задач, то есть программирование чего-то как-то. Программирование на занятиях отличается от программирования дома, так как на занятиях можно задать вопрос, показать код, получить быструю оценку кода, комментарии по улучшению, исправлению написанного. Очень легко было найти задачи для самых первых занятий. Задачи на циклы, условные операторы, и ООП (к примеру, написать класс «Собака» или класс «Вектор»). Сервисы вроде leetcode позволяют даже проверить правильность решения таких задач сразу, онлайн. Но какие задачи дать студентам на занятии, которое было посвящено коллекциям? Потокам? А аннотациям? За несколько лет я придумал, или переработал несколько таких задач, и эта статья, по сути, является сборником этих задач (к некоторым задачам прилагается решение).
Конечно, все задачи уже где-то появлялись. Однако, эта статья ориентирована на преподавателей курсов по программированию (для языков, похожих на Java, большинство задач подойдёт), или тех, кто преподаёт программирование частным образом. Эти задачи можно использовать «из коробки» на своих занятиях. Изучающие Java тоже могут попробовать решать их. Но такие решения требуют сторонней проверки и оценки.
Некоторые самые простые задачи, которые уже десятилетия все используют, я тоже включил в эту статью. Пожалуй, для того, чтобы не начинать сразу с абстрактных классов.
Как правильно учиться Java-программированию: история одного тьютора

Все началось больше десяти лет назад. Решив стать программистом, я начал изучать несколько языков, чтобы в конечном итоге найти «свой» язык.
В Java я влюбился с первого взгляда! Я с головой погрузился в программирование: я посвящал написанию кода по 10-18 часов каждый день. С каждым днем получалось все лучше и лучше.
Я устроился на первую работу, затем на вторую, но никогда не прекращал активно учиться. Довольно быстро я стал ведущим Java-разработчиком. Я достиг своей цели.
Я был счастлив…почти. Мне казалось, что я упускаю какую-то часть своей самореализации.
Я активно искал, чего же мне так не хватает. Подсказкой стало призвание моих родителей. Обучение! Теперь я понимаю, что унаследовал от них желание преподавать.
Отрасли нужны новые программисты, а новым программистам нужны наставники. Поэтому я стал Java-тьютором. Признаюсь, преподавать мне нравится не меньше, чем программировать. Может, даже больше.
С тех пор прошло несколько лет. Все это время я наблюдал, как мои ученики и другие люди учатся программировать. Многие из них допускают одни и те же ошибки: не в коде, а в самом процессе обучения.
Это ценный опыт: теперь я знаю, какие ошибки существуют, как их не допустить, как их исправить.
Я нашел много полезных интернет-ресурсов, которые рекомендую своим ученикам. Они подходят всем, кто решил серьезно заняться Java-программированием. В этой статье я расскажу об этих ресурсах. Однако, главная цель этой статьи — предотвратить распространенные ошибки в обучении.
Давайте по порядку.
Распространенные ошибки и методы борьбы с ними
1. Слишком много теории в самом начале
Итак, вы начали изучать язык программирования.
Что нужно сделать в первую очередь? Прочитать много теоретического материала, а затем сесть писать программу? Не совсем. Нужно прочитать совсем немного и сразу приступить к написанию кода.
Вспомните детский сад или начальную школу. На уроке рисования вам читали лекцию о том, как нужно рисовать? Я уверен, что нет. Вы и другие дети просто взяли в руки карандаши и начали рисовать. В лучшем случае, учитель показал, как правильно держать карандаш и объяснил, что из красного и синего получается фиолетовый. Или школьные спектакли: вам дали роль огурца или брокколи. Не думаю, что исполнителям таких ролей объяснили систему Станиславского.
Та же история и с программированием. Просто начните писать код. Теория важна, но не в самом начале обучения.
2. Желание получить все и сразу
Этот параграф снова о «вреде теории». Некоторые студенты погружаются в нее довольно глубоко: им хочется уже с первого задания понимать каждое слово в System.out.println. Это непосильная задача. Всему свое время. Лучший способ изучить теорию Java — это учиться поэтапно, постепенно увеличивая сложность. Несколько месяцев спустя вы с лёгкостью справитесь с задачей, которая сегодня кажется непосильной.
Сначала изучите основы Java Core, а уже потом начинайте читать книги и документацию — так чтение будет даваться вам намного легче.
3. Слишком мало практических заданий
На первых этапах обучения нужно освоить написание кода — я настаиваю на этом.
Новичкам лучше решать много маленьких и простых заданий, чем несколько сложных. Нет, я не говорю, что нужно совсем избегать сложных заданий.
Конечно, сложные задания тоже нужны. Одна сложная задача на 10–20 простых — вот идеальное соотношение. Где взять все эти задания? Об этом расскажу позже.
4. Слишком сложные задания, работа над которыми занимает целую вечность
Некоторые новички просто не знают, как прекратить работу над слишком сложной задачей. Если у вас что-то не получается, займитесь чем-нибудь более простым и вернитесь к сложному заданию позднее. Но если решение нужно вам прямо сейчас, смотрите 5-й пункт.
5. Неумение задавать вопросы
Есть новички, которые вообще ничего не спрашивают. Они боятся задать глупый вопрос, боятся выглядеть глупо в глазах опытных программистов. Есть и другие: они постоянно задают вопросы в стиле «Эй, ребят, здесь что-то пошло не так!».
Итак, что же делать, если что-то пошло не так? Задавать вопросы! Спросите на форумах—например, на Javaranch или stackoverflow. Спросите у своего наставника, если он у вас есть.
Как сформулировать вопрос? Обязательно подробно опишите проблему и покажите свой код. Затем опишите, что вы делали с этим кодом, как пытались его исправить и что из этого вышло. Я уверен, вам помогут. Каждый, абсолютно каждый программист бывал в такой ситуации.
6. Ошибка самоучек: невнимание к фактическим ошибкам в коде
Когда самостоятельно учишься программировать, довольно сложно понять, насколько хорошо работает твой код. Вдруг он выдает идеальный результат только при определенных условиях? Вдруг вы что-то упустили из виду? Если у вас есть наставник, который все проверит, то все в порядке. А если нет? Научитесь задавать себе вопрос «а что, если?» и проверять, как программа работает в разных условиях. В будущем этот навык поможет вам писать модульные тесты.
Тем не менее, в последнее время учиться программированию становится все легче и легче. Появляется все больше онлайн-курсов и ресурсов, на которых можно выполнить упражнение и тут же автоматически его проверить. Я приведу ссылки на такие ресурсы ниже.
7. Отладка кода? Извините, это не для меня!
Дорогой новичок-разработчик, тебе придется заниматься отладкой. Тем более, что с помощью современных IDE это довольно просто. Стоит один раз научиться отладке и у вас появится навык, полезный для обучения и будущей работы. Начинайте заниматься отладкой с первого месяца обучения.
8. Обучение ради обучения
Пока вы учитесь программировать, помните: вам нужно не просто пройти тест и забыть. Да, его нужно пройти, но полученные знания пригодятся вам в будущем. Поэтому расслабьтесь и приготовьтесь бесконечно поглощать информацию и много кодить.
9. Вы пишете код, не придумав решение задачи
Как этого избежать? Попробуй взять в руки бумагу и ручку, юный падаван. Если вы столкнулись с задачей и не можете сходу придумать решение — подумайте, что конкретно нужно сделать. Вы же не просто пишете код — вы разрабатываете решение. Возьмите ручку и бумагу и напишите примерный алгоритм. Кстати, некоторые компании на этапе собеседования предлагают выполнить тестовое задание на бумаге.
10. Страх экспериментов
Некоторые программисты привыкают решать определенные задачи одним и тем же способом, даже если знают другие варианты решения этой же проблемы. Если вы тоже привыкли идти по проторенной дорожке, попробуйте следующее:
A. Решите проблему обычным, проверенным способом и проверьте, получилось ли.
Б. Попытайтесь решить ту же проблему по-новому. Это не пустая трата времени. Представьте, что решаете уже другую проблему. У вас уже есть правильное решение, теперь можно вдумчиво и неспеша попробовать найти новое. Научившись чему-нибудь новому, возвращайтесь к уже выполненным заданиям и пробуйте снова решить их с помощью новых знаний.
11. Потеря мотивации из-за трудностей
Это очень распространенная проблема среди самоучек и тех, кто учится медленнее, чем все остальные в группе.
Поймите, что программирование — это не ядерная физика.
Если приложить достаточно усилий, почти любой может этому научиться.
Вам кажется, что у вас ничего не выйдет? Скорее всего, еще слишком рано об этом думать. В Интернете есть тысячи историй людей, у которых раз за разом не получается достичь цели. Среди этих людей много программистов.
Полезные ссылки для каждого новичка в Java
Как вы уже поняли, я сторонник обучения программированию на практике. Соответственно, я всегда советую своим ученикам использовать как можно больше ресурсов с заданиями по Java-программированию. За последние два года я нашел несколько замечательных сайтов. Вот они.
CodeGym. «Это он», — подумал я, когда нашел CodeGym. — «Это тот самый курс, о котором я мечтал».
Этот курс Java Core, на 80% состоит из практики. Он поможет как новичкам, так и опытным программистам. Главное достоинство CodeGym — это его система упражнений. На сайте полно заданий: можно каждый день заниматься и улучшать свои навыки. На CodeGym около 1000 упражнений для разных уровней.
Делать упражнения в CodeGym можно с помощью IDE в браузере или используя плагин для IntelliJ IDEA, самой популярной Java IDE. Интеллектуальная система проверки проверит ваш код и укажет, что нужно исправить. Это особенно полезно самоучкам и ученикам, у которых есть наставник: ни один человек не может правильно проверить 10 программ у 20 учеников в день. А система проверки может.
CodeGym разделен на 40 уровней. Каждый уровень состоит из 15–30 заданий на написание кода, 10–20 уроков по Java и мотивирующих статей. Таким образом, решая задачи, вы проходите уровень за уровнем— это своего рода игра, в которую вам не надоест играть. Еще один плюс: у CodeGym веселые, полные юмора уроки, мне они очень нравятся.

CodinGame. Решение заданий на CodinGame — это хороший способ улучшить навыки программирования. Этот сайт предназначен для людей, которые как минимум уже знают основы программирования (на Java или на других 22 языках). Есть и сложные задания для опытных разработчиков.
У CodinGame есть IDE для браузера (как и у CodeGym). С ее помощью можно писать код и компилировать его в том же окне — так вы видите результаты в режиме реального времени. Это не онлайн-курс, а сложные упражнения, связанные с реальной разработкой игр. Сделав упражнение, вы получаете визуальную обратную связь: видите небольшое изменение в игре.
На Codewars можно оттачивать мастерство программирования, соревнуясь с другими разработчиками. Это полезный и интересный сайт для продвинутых Java-программистов. Здесь вы найдете сложные задачи, а не уроки.
Сначала вам дается восьмой кю (уровень мастерства). Добравшись до первого кю, вы достигнете вершины мастерства.
Вывод
Программируйте ежедневно, уделяйте этому много времени. Используйте приведенные выше сайты с упражнениями. Иногда изучайте теорию. Задавайте много вопросов. Начинайте программировать! Даже не сомневайтесь.
Решения на Java
Приведём простейший пример кода (решение задачи A + B):
Общие замечания
- Решение должно содержаться в одном файле с расширением java.
- Код должен находиться в пакете по умолчанию, т. е. не следует использовать директиву package . Если это требование не выполнено, то решение успешно компилируется, но падает на всех тестах с вердиктом «Ошибка во время выполнения» (дело в том, что Java-машина не может загрузить класс).
- В файле должен находиться единственный public-класс, имя которого совпадает с именем файла решения (например, если файл с исходником называется Solution.java, то класс будет называться Solution ). Public-класс должен содержать статический метод main . Разумеется, допускается использование вложенных классов.
- Если в решении задачи используется глубокая рекурсия, может произойти переполнение системного стека. (В некоторых случаях java-машина странным образом использует программный стек, и «глубокой» может стать рекурсия глубиной меньше тысячи вызовов.) Возникнет ошибка StackOverflowError , и если она специально не обрабатывается (а такие ошибки, которые наследуются от класса Error , вообще не принято обрабатывать в пользовательском коде), программа аварийно завершается. Выходом может стать увеличение размера стека. Как известно, у каждого потока в программе стек свой. Java позволяет создать новый поток и в конструкторе класса Thread задать желаемый размер стека, а затем весь код решения выполнять в новом потоке. Сигнатура конструктора выглядит следующим образом:
Пример использования (устанавливаем размер стека в 64 МБ):
К сожалению, документация гласит, что в общем случае эффект от параметра stackSize зависит от реализации конкретной виртуальной машины JVM и носит скорее рекомендательный характер. На некоторых платформах указание большего значения stackSize позволит достичь большей глубины рекурсии до возникновения ошибки StackOverflowError . Аналогично, указание меньшего значения может позволить большему числу потоков существовать одновременно до появления другой ошибки — OutOfMemoryError (или какой-то ещё). Детали соотношения между значением параметра stackSize и максимальной глубиной рекурсии являются платформозависимыми. На некоторых платформах параметр, задающий размер стека, может вовсе игнорироваться или округляться в любую сторону.
Стоит отметить, что аварийное завершение второго потока в результате любой ошибки во время выполнения, вообще говоря, не приводит к вердикту Run-time Error, поскольку основной поток завершается успешно. В результате возникновения подобной ошибки следует ожидать вердикт Wrong Answer или же Presentation Error.
Ввод и вывод данных
Как правило, для ввода используют один из четырёх способов, которые различаются по скорости и удобству использования. Ввод/вывод в Java может стать очень медленным, если пользоваться им неправильно.
Scanner
Класс Scanner является самым удобным средством для чтения входных данных в большинстве задач, но скорость его работы оставляет желать лучшего. Имеет много методов для чтения примитивных типов, длинных чисел, строки до разделителя, строки до переноса, строки по регулярному выражению и т. д. Все это богатство основывается на регулярных выражениях, поэтому работает медленно. Когда размер входного файла примерно мегабайт, с помощью сканера его удастся прочитать примерно за полсекунды-секунду. Поэтому, прежде чем использовать сканер, убедитесь, что размер входного файла небольшой. Подводные камни: конструктор Scanner(String) читает данные из строки, а не из файла, который так назван.
Пример чтения всех целых чисел из файла input.txt (до конца файла):
BufferedReader
Обеспечивает достаточно быстрый ввод для большинства задач. Но самостоятельно этот класс позволяет лишь читать отдельные символы и строки.
Пример чтения чисел из файла input.txt , где каждое число записано в отдельной строке, после последнего может следовать, а может и не следовать перевод строки, но пустые строки недопустимы:
StreamTokenizer + BufferedReader
Класс, изначально предназначенный для токенизации исходных текстов на Java. По этой причине имеет слегка запутанный интерфейс и кучу нетривиальных настроек. Работает быстро, но имеет некоторые подводные камни:
- Если вы настраиваете его на чтение чисел, все они хранятся в double после прочтения. Это очень плохо, когда среди входных данных попадаются long ‘и (64-битные числа): они теряют точность, если их хранить в double .
- В одном из своих режимов автоматически распознает backslash escape-последовательности. То есть \n во входном файле превращается в один символ перевода строки. При решении задач такое поведение может только мешать.
Также стоит отметить, что этот способ требует в несколько раз меньше памяти для создания промежуточных объектов, чем остальные.
Резюме по StreamTokenizer : его имеет смысл использовать в задачах на парсинг. В таких задачах решения получаются существенно короче.
Пример чтения всех целых чисел из файла input.txt (до конца файла):
StringTokenizer + BufferedReader
Довольно простая по смыслу комбинация: из файла читаем по строкам, далее строку бьём на токены. В итоге получается метод String next() , который читает «следующий токен», поверх которого делаются int nextInt() , long nextLong() , double nextDouble() через соответственно Integer.parseInt , Long.parseLong , Double.parseDouble . Все это работает почти так же быстро, как StreamTokenizer , за вычетом того, что строк создается побольше. Тем не менее, файлы порядка десяти мегабайт читаются на ура.
По сравнению с другими перечисленными выше способами для этого нужно больше всего кода. Однако код можно написать один раз и использовать в нескольких задачах.
Подводные камни: когда файл кончается, метод readLine класса BufferedReader возвращает null . Если в задаче нужно читать данные до конца файла, нужно предусмотреть корректный путь этого null в написанных методах.
Приведём расширенный пример написания обёртки над StringTokenizer для чтения всех чисел из файла. Числа могут быть записаны по несколько в строке, возможны пустые строки и т. д.
Вывод
Класс PrintWriter подходит для всех случаев и работает достаточно быстро.
Важно не забывать по окончании работы вызывать у writer ‘а метод close() или flush() , чтобы очищать буфер и сбрасывать таким образом несохранённые изменения на диск.
В PrintWriter имеются методы print и println , перегруженные для множества встроенных типов. Есть даже printf с семантикой, похожей на то же самое из языка C, только в Java переменное число аргументов функции (varargs) реализовано через массивы, поэтому этот метод медленный. Зато он полезен, когда необходимо вывести, например, вещественное число с нужной точностью:
Синтаксис написания форматной строки отличается от такового в C, подробности есть в документации.
Также медленно работают вызовы типа println(a + » » + b) . Выводите по одной переменной за раз, и тогда вы добьётесь максимальной эффективности.
В Java есть ещё класс PrintStream , он делает то же самое, что PrintWriter , но работает с byte , а не с char .
Локализация
Следует отметить, что ввод/вывод вещественных чисел в Java зависит от настроек локализации (разделителем в числе является точка или запятая: 0.5 или 0,5 ). В задачах всегда нужно использовать точку. По умолчанию на сервере установлена американская локаль Locale.US , поэтому с этим не должно быть проблем.
Использование свойства ONLINE_JUDGE
Запуск программы на сервере осуществляется с определенным свойством ONLINE_JUDGE . С его помощью в коде программы можно определить, что она запущена на сервере. Например, это можно использовать для решения, использовать ли для работы файлы или стандартный ввод/вывод:
Java: краткое руководство для начинающих. Пишем простое приложение без опыта программирования
Java – один из самых востребованных языков программирования в мире и один из двух официальных языков программирования, используемых в разработке Android (другой – Kotlin). Разработчики, знакомые с Java, весьма востребованы и способны создавать широкий спектр различных приложений, игр и инструментов. С помощью этой краткой статьи по Java для начинающих вы сможете сделать свои первые шаги к тому, чтобы стать одним из таких разработчиков. Мы рассмотрим все, что вам нужно знать, чтобы начать работу, и поможем вам создать свое первое простое приложение.
Что такое Java?
Java-это объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems в 1990-х годах (позже купленной Oracle).
Понятие «объектно-ориентированный» относится к способу написания структурного кода Java, а именно: разделение кода на так называемые «классы», которые запускаются вместе, чтобы обеспечить согласованное порождение объектов. Мы обсудим это позже, но достаточно сказать, что это приводит к универсальному и организованному коду, который легко редактировать и перепрофилировать.
Java находится под влиянием C и C++, поэтому она имеет много общего с этими языками (и C#). Одним из больших преимуществ Java является то, что он «платформенно-независимый». Это означает, что код, который вы пишете на одной платформе, можно легко запустить на другой. Это называется принципом «пишем один раз, запускаем где угодно» (хотя на практике это не всегда так просто, как кажется).
Чтобы запустить и использовать Java, вам нужно три вещи:
- JDK – Java Development Kit
- JRE – Java Runtime Environment
- JVM – Java Virtual Machine
Виртуальная машина Java (JVM) гарантирует, что у ваших приложений Java есть доступ к минимальным ресурсам, необходимым для их запуска. Именно благодаря JVM программы Java так легко запускаются на разных платформах.
Среда исполнения Java (JRE) предоставляет собой «контейнер» для всех этих элементов и кода для запуска приложения. JDK – это «компилятор», который интерпретирует сам код и выполняет его. В JDK также есть инструменты разработчика, необходимые для написания кода Java (как и следует из названия).
Хорошая новость заключается в том, что разработчикам нужно только позаботиться о загрузке JDK, поскольку он поставляется вместе с двумя другими компонентами.
Как начать писать на Java
Если вы планируете разрабатывать приложения на Java на своем настольном компьютере, то вам нужно будет загрузить и установить JDK.

Вы можете получить последнюю версию JDK непосредственно с сайта Oracle. Как только вы установите его, ваш компьютер будет иметь возможность понимать и запускать код на Java. Тем не менее, вам все равно понадобится некоторое вспомогательное ПО, чтобы было действительно удобно писать код. Это так называемая «интегрированная среда разработки» или IDE: интерфейс, используемый разработчиками для ввода текста кода и вызова JDK.
При разработке для Android вы будете использовать IDE Android Studio. Она не только послужит интерфейсом для кода на Java (или Kotlin), но и станет мостом для доступа к специфичным для Android вызовам из SDK.
Для целей нашего краткого руководства по Java может быть и проще написать свой код непосредственно в приложении-компиляторе Java. Они могут быть скачаны для Android и iOS, можно даже найти веб-приложения, которые работают в вашем браузере. Эти инструменты предоставляют все необходимое в одном месте и позволяют сразу начать тестирование кода. Например, compilejava.net.
Насколько легко научиться программированию на Java?
Если вы новичок в разработке на Java, то ваши опасения вполне понятны. Так насколько же легко изучить Java?
Этот вопрос имеет несколько субъективную природу, но лично я бы отнес Java к языкам, не самым простым для изучения. Хотя он проще, чем C++, и часто описывается как более удобный для пользователя, но он, безусловно, не столь прост, как такие его конкуренты, как Python или BASIC, которые больше подходят для изучения начинающим программистам.
C# также немного проще по сравнению с Java, хотя они очень похожи.
Конечно, задавшись конкретной целью – стать разработчиком приложений для Android, – проще всего сразу начать с языка, который уже поддерживается этой платформой.
У языка Java есть свои особенности, но его, безусловно, можно изучить, и как только вы его освоите, вам откроется множество возможностей. А поскольку Java имеет много общего с C и C#, вы сможете перейти на эти языки без особых усилий.
Каков синтаксис Java?
Прежде чем мы погрузимся в самую суть этого руководства по Java для начинающих, стоит уделить некоторое время изучению синтаксиса Java.
Синтаксис Java относится к способу написания конкретных алгоритмов. Java очень принципиален в этом вопросе, и, если вы не пишете код определенным образом, то ваша программа не будет работать!
На самом деле я написал целую статью о синтаксисе Java для разработки Android, кратко перечислю особенности синтаксиса:
- Большинство строк должно заканчиваться точкой с запятой «;».
- Исключение составляет строка, открывающая новый блок кода. Она должна начинаться открытой фигурной скобкой « <». В качестве альтернативы эту открытую скобку можно поместить на новую строку под оператором. Блоки кода – это фрагменты кода, которые выполняют определенные, отдельные задачи.
- Код внутри блока кода должен иметь отступ, чтобы отделить его от остальных.
- Открытые блоки кода должны быть закрыты закрывающей фигурной скобкой «>».
- Комментарии – это строки, которым предшествуют символы «//».
Если вы нажимаете кнопку «запустить» или «скомпилировать» и получаете ошибку, то есть большая вероятность, что вы где-то пропустили точку с запятой!
Вы никогда не перестанете делать это, и это никогда не перестанет вас раздражать. Расслабьтесь!
С этими знаниями мы сможем глубже погрузиться в руководство по Java!
Основы Java: ваша первая программа
Зайдите на compilejava.net, и вас встретит редактор с кучей готовых примеров.
(Если же вы предпочитаете использовать другую IDE или стороннее приложение, это тоже прекрасно! Скорее всего, ваш новый проект будет состоять из аналогичного кода).
Удалите все, кроме следующего:
Это то, что мы, программисты, мы называем «шаблоном» (этот код скопирован из учебника Java от Фила Данфи). Шаблонный код – так можно назвать любой код, который встречается внутри практически любой программы.
Первая строка здесь определяет «класс», который по сути является модулем кода. Затем нам нужен метод внутри этого класса, который представляет собой небольшой блок кода, выполняющий задачу. В каждой программе Java должен быть метод main, так как он сообщает Java, где начинается программа.
Об остальном поговорим чуть ниже, не беспокойтесь. Все, что нам нужно знать для этого урока Java прямо сейчас, – это то, что код, который мы действительно хотим запустить, должен быть помещен в фигурные скобки под словом «main».
Поместите сюда следующий оператор:
Этот оператор напишет слова: «Hello world!» на вашем экране. Нажмите «Compile & Execute» и вы увидите его в действии.
Поздравляю! Вы только что написали свое первое Java-приложение!
Переменные в Java
Теперь пришло время рассказать о некоторых более важных вещах, лежащих в основе Java. Мало что может быть более фундаментальным в программировании, чем обучение использованию переменных!
Переменная по сути является «контейнером» для некоторых данных. Это означает, что вы выберете слово, которое будет представлять какое-то значение. Нам также необходимо определить переменные, основанные на типе данных, на которые они будут ссылаться.
Вот три основных типа переменных, которые мы собираемся ввести в этом руководстве по Java:
- Целые числа (integers) – как целые числа.
- Плавающие точки (floats) – или «переменные с плавающей точкой». Они содержат все числа, в том числе те, которые представляют десятичные дроби. «Плавающая точка» относится к десятичному разряду.
- Строки (strings)– строки содержат буквенно-цифровые символы и символы. Обычно строка используется для хранения чьего-то имени или, возможно, предложения.
Как только мы определяем переменную, мы можем вставить ее в наш код, чтобы изменить выходные данные. Например:
В этом примере кода мы определили строковую переменную с именем name . Мы сделали это, используя тип данных String , за которым следует имя нашей переменной, а затем данные. Когда вы помещаете что-то в двойные кавычки, то Java интерпретирует это дословно как строку.
Теперь мы печатаем на экране, как и раньше, но на этот раз заменяем «Hello world!» на «Hello + имя». Этот код показывает строку «Hello», за которой следует любое значение, содержащееся в следующей строковой переменной!
Самое замечательное в использовании переменных заключается в том, что они позволяют нам манипулировать данными, чтобы наш код мог вести себя динамически. Изменяя значение name , вы можете изменить поведение программы, не изменяя никакого фактического кода!
Условные операторы в Java
Еще одна из самых важных основ Java – это работа с условными операторами.
Условные операторы используют блоки кода, которые выполняются только при определенных условиях. Например, мы можем захотеть предоставить специальные пользовательские права основному пользователю нашего приложения.
Посмотрите на следующий код:
Запустите этот код, и вы увидите, что специальные разрешения предоставлены. Но, если вы измените значение name на что-то другое, то код не будет работать.
В этом коде используется оператор if . Он проверяет, является ли утверждение, содержащееся в скобках, истинным. Если это так, то будет запущен следующий блок кода. Не забудьте сделать отступ в коде, а затем закрыть блок в конце! Если оператор в скобках имеет значение false, то код просто пропустит этот раздел и продолжит работу с закрытых скобок.
Обратите внимание, что при наложении условия на данные мы используем два знака «=». Вы же используете только один, когда присваиваете какие-то данные переменным.
Методы на Java
Еще одна простая концепция, которую мы можем ввести в этом руководстве Java – это использование методов. Это даст вам немного больше понимания того, как структурирован Java-код и что с ним можно сделать.
Все, что мы собираемся сделать, – это взять часть кода, который мы уже написали, а затем поместить его в другой метод вне метода main :
Мы создали новый метод в строке, которая начинается со static void . Это означает, что метод определяет функцию, а не свойство объекта, и что он не возвращает никаких данных.
Но все, что мы вставляем в следующий блок кода, теперь будет выполняться каждый раз, когда мы «вызываем» метод, записывая его имя в нашем коде: grantPermission() . Затем программа выполнит этот блок кода и вернется к точке, из которой она вышла.
Если бы мы написали вызов grantPermission() несколько раз, то сообщение «Special user priveleges granted» также отобразилось бы несколько раз. Именно это делает методы такими фундаментальными основами Java: они позволяют выполнять повторяющиеся задачи, не записывая код снова и снова.
Передача аргументов в Java
Но самое замечательное в методах то, что они могут принимать переменные и манипулировать ими. Мы сделаем это, передав переменные в наши методы как «строки». Вот для чего и нужны скобки, следующие за названием метода.
В следующем примере я создал метод, который получает строковую переменную, названную nameCheck . Затем я могу обратиться к nameCheck из этого блока кода, и ее значение будет равно тому, что я поместил в фигурные скобки, когда вызвал метод.
Для этого руководства по Java я передал значение name методу и поместил туда оператор if . Таким образом, мы можем проверять несколько имен подряд, не набирая один и тот же код снова и снова.
Надеюсь, это даст вам представление о том, насколько мощными могут быть методы!
В завершение
Надеюсь, теперь у вас есть хорошее представление о том, как изучать Java. Вы даже можете сами написать какой-нибудь простой код: используя переменные и условные операторы, вы действительно можете заставить Java делать некоторые интересные вещи уже сейчас.
Следующий этап состоит в понимании объектно-ориентированного программирования и классов. Это понимание есть то, что действительно дает Java и подобным языкам их силу, но поначалу может быть немного сложным для осмысления.