Skip to content

Commit 02dcf0e

Browse files
committed
java_beginners_homework
0 parents  commit 02dcf0e

219 files changed

Lines changed: 6397 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/ci.yml

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
name: CI
2+
3+
on:
4+
push:
5+
branches: [ master, main ]
6+
pull_request:
7+
branches: [ master, main ]
8+
workflow_dispatch:
9+
10+
concurrency:
11+
group: ${{ github.workflow }}-${{ github.ref }}
12+
cancel-in-progress: true
13+
14+
jobs:
15+
build:
16+
runs-on: ubuntu-latest
17+
timeout-minutes: 15
18+
19+
steps:
20+
- uses: actions/checkout@v4
21+
22+
- name: Set up JDK 17
23+
uses: actions/setup-java@v4
24+
with:
25+
java-version: '17'
26+
distribution: 'temurin'
27+
28+
- name: Compile Java files
29+
run: |
30+
mkdir -p build/classes
31+
JAVA_FILES=$(find . -name "*.java" -not -path "*/test/*" -not -path "./build/*")
32+
if [ -n "$JAVA_FILES" ]; then
33+
echo "$JAVA_FILES" | xargs javac -d build/classes -cp build/classes 2>&1 || true
34+
echo "## Build" >> $GITHUB_STEP_SUMMARY
35+
echo "Compiled $(echo "$JAVA_FILES" | wc -l) Java files" >> $GITHUB_STEP_SUMMARY
36+
fi
37+
38+
- name: Find and run tests
39+
run: |
40+
TEST_FILES=$(find . -name "*Test.java" -o -name "*Tests.java" 2>/dev/null)
41+
if [ -n "$TEST_FILES" ]; then
42+
echo "## Tests" >> $GITHUB_STEP_SUMMARY
43+
echo "Found $(echo "$TEST_FILES" | wc -l) test files:" >> $GITHUB_STEP_SUMMARY
44+
echo '```' >> $GITHUB_STEP_SUMMARY
45+
echo "$TEST_FILES" >> $GITHUB_STEP_SUMMARY
46+
echo '```' >> $GITHUB_STEP_SUMMARY
47+
else
48+
echo "## Tests" >> $GITHUB_STEP_SUMMARY
49+
echo "No test files found. Add tests to improve coverage." >> $GITHUB_STEP_SUMMARY
50+
fi
51+
52+
- name: Code inventory
53+
run: |
54+
echo "" >> $GITHUB_STEP_SUMMARY
55+
echo "## Code Inventory" >> $GITHUB_STEP_SUMMARY
56+
echo '```' >> $GITHUB_STEP_SUMMARY
57+
find . -name "*.java" | wc -l | xargs -I{} echo "Java files: {}" >> $GITHUB_STEP_SUMMARY
58+
find . -name "*.java" | xargs wc -l 2>/dev/null | tail -1 >> $GITHUB_STEP_SUMMARY
59+
echo '```' >> $GITHUB_STEP_SUMMARY

.gitignore

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
*.class
2+
3+
# Mobile Tools for Java (J2ME)
4+
.mtj.tmp/
5+
6+
# Package Files #
7+
*.jar
8+
*.war
9+
*.ear
10+
11+
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
12+
hs_err_pid*
13+
14+
.idea

CLAUDE.md

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# java_beginners_homework
2+
3+
## Learning Objectives
4+
5+
This is educational material. Key goals:
6+
- Study the source code and understand the patterns used
7+
- Complete exercises and homework assignments
8+
- Experiment with modifications to deepen understanding
9+
10+
## Prerequisites
11+
12+
- JDK 8+
13+
14+
## Build & Run
15+
16+
```bash
17+
# See project files for build instructions
18+
```
19+
20+
## Development Guidelines
21+
22+
### Code Style
23+
- Follow standard Java conventions
24+
- Keep code clean and well-organized
25+
- Use meaningful variable and method names
26+
27+
### Git Workflow
28+
- Write clear, descriptive commit messages
29+
- One logical change per commit
30+
- Test before committing
31+
32+
### Testing
33+
- Write tests for new functionality
34+
- Run the full test suite before pushing
35+
- Keep tests focused and independent

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2016 LevelUp
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

README.md

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
# Материалы для самостоятельной работы
2+
3+
Большинство файлов можно читать прямо в браузере (кликните на файл и все). **md** - это специальная местная разметка. Презентации - это **java_beginners_1_\<N\>.pdf**, где **N** - номер урока. Задачник **java_beginners_workbook_2** будет обновляться по мере продвижения.
4+
5+
---
6+
Наш чат - [Telegram](https://t.me/joinchat/AAAAAAvrnIwJvNbe6M5WQQ)
7+
8+
Наши видео на канале:
9+
* [Hello, World!](https://www.youtube.com/watch?v=Ta3KT68cK1M)
10+
* [По основам Java](https://www.youtube.com/playlist?list=PLqfxC1fDR68Y1a14O4uGPQmQwfMgGc-8u)
11+
* [Простейшая программа, ч. 1](https://www.youtube.com/watch?v=jdfAIeGn1r8)
12+
* [Простейшая программа, ч. 2](https://www.youtube.com/watch?v=6j0bMl1Jr68)
13+
* [Проект "Почта" - пример проекта первого курса](https://www.youtube.com/playlist?list=PLqfxC1fDR68Y8CcDZppZgi1m6ftYoMZJo)
14+
* [По Git, для желающих](https://www.youtube.com/playlist?list=PLqfxC1fDR68aaZYAsqXcpJV-JcjGKnZIH)
15+
* [Работа с github](https://www.youtube.com/watch?v=azFmXyrdaRg)
16+
17+
---
18+
19+
## Для каждого занятия - специальная папка
20+
- **questions.md** - здесь лежат контрольные вопросы по занятию, с них начнется следующее занятие
21+
- **agenda.md** - что проходили на занятии
22+
- **homework.md** - домашнее задание
23+
- **reading.md** - что почитать. Особенно интересные вещи отмечены :exclamation: и :boom:. Строго рекомендуется прочитать к следующему занятию - :point_right:
24+
- Java-файлы с примерами кода.
25+
26+
## Рекомендованная литература
27+
* [Oracle java trails](https://docs.oracle.com/javase/tutorial/)
28+
* Thinking in Java (Философия Java) - Брюса Эккеля
29+
* Шилдт - Java 8 - полное руководство
30+
* Алгоритмы:
31+
* Кнут (для продвинутых)
32+
* Кормен
33+
* Седжвик
34+
35+
36+
## Прочие видео-материалы
37+
* [Сколько часов в день может работать программист?](https://www.youtube.com/watch?v=kfsAMZ7_DdI)
38+
* [Любимые языки программирования в Яндексе](https://www.youtube.com/watch?v=sSYRCfi3Sho)
39+
40+
41+
42+
# Инструменты
43+
## Системы контроля версий
44+
* [Системы контроля версия (общие сведения)](https://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%8F%D0%BC%D0%B8)
45+
* [о системах управления версиями]( https://ru.m.wikipedia.org/wiki/%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%8F%D0%BC%D0%B8)
46+
* [Зачем нужны системы контроля версий](http://embedders.org/content/zachem-nuzhny-sistemy-kontrolya-versii-tipa-svn )
47+
48+
Git
49+
---
50+
* [Основы Git](https://git-scm.com/book/ru/v1/%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5-%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B-Git)
51+
* [Git для командной строки](https://git-for-windows.github.io)
52+
* [Интерфейс для Windows](https://tortoisegit.org)
53+
* [Как начать работать с гитхабом (для тех, кто хочет разобраться)](https://m.habrahabr.ru/post/125799/ )
54+
55+
## JDK
56+
* [Скачать Java SE](http://www.oracle.com/technetwork/java/javase/downloads)
57+
* [Java 8 Documentation](https://docs.oracle.com/javase/8/docs/api/)
58+
* [Новости сообщества JVM](https://telegram.me/proJVM)
59+
60+
## Intellij Idea
61+
* [Idea Community Edition](https://www.jetbrains.com/idea/download)
62+
63+
## Far manager
64+
* [Download](http://www.farmanager.com/download.php?l=ru)
65+
66+
# Вопросы на собеседованиях по Java:
67+
https://docs.google.com/document/d/1N39ui--L2O3X76mX_V2mlHjYr90kC02crzumcFxgSJE/edit
68+
69+
# Head Hunting (Career)
70+
* [LinkedIn](https://www.linkedin.com)
71+
* [HH](http://spb.hh.ru)
72+
* [itmozg.ru](http://itmozg.ru/)
73+
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package ru.levelp.examples.basics.arrays;
2+
3+
import java.util.Arrays;
4+
5+
/**
6+
* Примеры синтаксиса для работы с массивами
7+
*/
8+
public class ArraysExample {
9+
public static void main(String[] args) {
10+
// Инициализация
11+
int[] a1 = new int[]{1, 2, 3, 10};
12+
// Сокращённая форма инициализации
13+
int a2[] = {1, 2, 3, 10};
14+
// Массив - можно сразу не инициализировать
15+
int[] a3;
16+
a3 = new int[100];
17+
// Пробегаем по всем элементам массива
18+
for (int i = 0; i < a1.length; i++) System.out.println("a1[" + i + "] = " + a1[i]);
19+
// Если нам не важны индексы, мы можем использовать цикл "foreach"
20+
for (int i : a2) System.out.print(i + " ");
21+
System.out.println(); // Просто перевод строки
22+
// == Двухмерный массив ==
23+
int[][] array2D = {
24+
{1, 2, 3},
25+
{4, 5, 6},
26+
{7, 8, 9}
27+
};
28+
int x = array2D[0][1]; // Элемент массива с индексом 0 1
29+
array2D[1][1] = 231; // Новое значение
30+
31+
32+
//////////////////////////////
33+
// == Методы класса Arrays ==
34+
//////////////////////////////
35+
System.out.println("Arrays.toString(...) для одномерного массива:");
36+
System.out.println(Arrays.toString(a1));
37+
38+
// Зачем нужен Arrays.deepToString(...)? Сравните вывод на экран для двухмерного массива:
39+
System.out.println("Arrays.toString(...) для двухмерного массива:");
40+
System.out.println(Arrays.toString(array2D));
41+
System.out.println("Arrays.deepToString(...) для двухмерного массива:");
42+
System.out.println(Arrays.deepToString(array2D));
43+
}
44+
}
45+
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package ru.levelp.examples.basics.arrays;
2+
3+
import java.util.Random;
4+
5+
/**
6+
* Создание массива случайных чисел
7+
*/
8+
public class RandomArrayExample {
9+
public static void main(String[] args) {
10+
Random r = new Random();
11+
// инициализируем массив длинной 10
12+
int[] array = new int[10];
13+
// пробегаем по весму массиву
14+
for (int i = 0; i < array.length; i++) {
15+
// для каждого индекса массива - генерируем случайное число от 0 до 100 (исключая) и записываем в массив
16+
array[i] = r.nextInt(100);
17+
}
18+
}
19+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package ru.levelp.examples.basics.arrays;
2+
3+
import java.util.Arrays;
4+
import java.util.Random;
5+
6+
/**
7+
* Нахождение суммы оценок класса, сгенерированных случайным образом
8+
*/
9+
public class SumArrayExample {
10+
public static void main(String[] args) {
11+
Random r = new Random();
12+
// инициализируем массив случайной длины (генерируетя значение от 12 до 32 ислючая)
13+
int[] array = new int[r.nextInt(20) + 12];
14+
// пробегаем по весму массиву
15+
for (int i = 0; i < array.length; i++) {
16+
// для каждого индекса массива - генерируем случайное число от 2 до 6 (исключая) и записываем в массив
17+
array[i] = r.nextInt(4) + 2;
18+
}
19+
20+
// Сумма long на случай, если будет переполнение (в общем случае. у нас это нереально с нашими значениями)
21+
long sum = 0;
22+
// Пробегаем по всем элементам в массиве
23+
for (int element : array) {
24+
// Каждый элемент добавляем к уже накопленной сумме
25+
sum += element;
26+
}
27+
// Выводим результат (не забываем вывести сам массив!)
28+
System.out.println("Массив: " + Arrays.toString(array));
29+
System.out.println("Сумма: " + sum);
30+
}
31+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package ru.levelp.examples.basics.branches;
2+
3+
/**
4+
* Демонстрация работы ветвления if-then-else
5+
*/
6+
public class IfThenElse {
7+
public static void main(String[] args) {
8+
int i = 10;
9+
10+
if (i < 2) {
11+
System.out.println("Too small!");
12+
} else if (i > 100) {
13+
System.out.println("Too big!");
14+
} else {
15+
System.out.println("i = " + i);
16+
}
17+
}
18+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package ru.levelp.examples.basics.branches;
2+
3+
/**
4+
* Демонстрация работы switch
5+
*/
6+
public class Switch {
7+
public static void main(String[] args) {
8+
int grade = 3;
9+
switch (grade){
10+
case 5:
11+
System.out.println("Отлично!");
12+
break;
13+
case 4:
14+
System.out.println("Очень хорошо!");
15+
break;
16+
case 3:
17+
System.out.println("Неплохо!");
18+
break;
19+
case 2:
20+
case 1:
21+
System.out.println("Неплохо бы пересдать!");
22+
break;
23+
default:
24+
System.out.println("Неверная оценка!");
25+
break;
26+
}
27+
}
28+
}

0 commit comments

Comments
 (0)