From ba117ae21e57eee5fe86921a5e18f73f39bb4ef5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BE=D0=BB=D0=BE=D0=B4=D0=B8=D0=BD=20=D0=93=D0=B5?= =?UTF-8?q?=D1=80=D0=BC=D0=B0=D0=BD?= Date: Sat, 22 Aug 2026 12:00:50 +0400 Subject: [PATCH 01/14] feat(collection): add MyList interface --- .../main/java/ru/project/collection/MyList.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 app/src/main/java/ru/project/collection/MyList.java diff --git a/app/src/main/java/ru/project/collection/MyList.java b/app/src/main/java/ru/project/collection/MyList.java new file mode 100644 index 0000000..e97132e --- /dev/null +++ b/app/src/main/java/ru/project/collection/MyList.java @@ -0,0 +1,16 @@ +package ru.project.collection; + +public interface MyList { + + void add(T element); + + T get(int index); + + T set(int index, T element); + + T remove(int index); + + int size(); + + boolean isEmpty(); +} From c2efae1248b5153af38bcb7f08e2a97e017cd1f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=93=D0=B0=D0=B4=D0=B6=D0=B8=D0=BA=D1=83=D1=80=D0=B1?= =?UTF-8?q?=D0=B0=D0=BD=D0=BE=D0=B2=20=D0=A2=D0=B5=D0=BC=D0=B8=D1=80=D0=BB?= =?UTF-8?q?=D0=B0=D0=BD?= Date: Mon, 24 Aug 2026 00:27:47 +0300 Subject: [PATCH 02/14] feat: add element to linked list --- app/src/main/java/ru/project/collection/MyLinkedList.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 app/src/main/java/ru/project/collection/MyLinkedList.java diff --git a/app/src/main/java/ru/project/collection/MyLinkedList.java b/app/src/main/java/ru/project/collection/MyLinkedList.java new file mode 100644 index 0000000..e69de29 From ffb229b1a72960987913d2d20c4c1ef664a1ac4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=93=D0=B0=D0=B4=D0=B6=D0=B8=D0=BA=D1=83=D1=80=D0=B1?= =?UTF-8?q?=D0=B0=D0=BD=D0=BE=D0=B2=20=D0=A2=D0=B5=D0=BC=D0=B8=D1=80=D0=BB?= =?UTF-8?q?=D0=B0=D0=BD?= Date: Mon, 24 Aug 2026 00:40:02 +0300 Subject: [PATCH 03/14] feat: add implement get by index for linked --- .../ru/project/collection/MyLinkedList.java | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/app/src/main/java/ru/project/collection/MyLinkedList.java b/app/src/main/java/ru/project/collection/MyLinkedList.java index e69de29..42ea519 100644 --- a/app/src/main/java/ru/project/collection/MyLinkedList.java +++ b/app/src/main/java/ru/project/collection/MyLinkedList.java @@ -0,0 +1,74 @@ +public class MyLinkedList implements MyList +{ + private Node head; + private int size; + + public void add(T value) { + if (head == null) { + this.head = new Node<>(value); + } else { + Node temp = head; + while (temp.getNext() != null) { + temp = temp.getNext(); + } + temp.setNext(new Node<>(value)); + } + size++; + } + public T get(int index) + { + int currentIndex = 0; + Node temp = head; + while(temp != null) + { + if (currentIndex == index) + { + return (T) temp.getValue(); + + } + else { + temp = temp.getNext(); + currentIndex++; + } + + } + throw new IllegalArgumentException(); + } + public String toString() { + Object[] res = new Object[size]; + int index = 0; + Node temp = head; + while (temp != null) { + res[index] = temp.getValue(); + index++; + temp = temp.getNext(); + } + return Arrays.toString(res); + } + public static class Node { + private T value; + private Node next; + + public Node(T value) { + this.value = value; + } + + public void setValue(T value) { + this.value = value; + } + + public void setNext(Node next) { + this.next = next; + } + + public T getValue() { + return value; + } + + public Node getNext() { + return next; + } + } + + +} \ No newline at end of file From ef1c54f10ed4a9ab2d3ea997c11702577194ac06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=93=D0=B0=D0=B4=D0=B6=D0=B8=D0=BA=D1=83=D1=80=D0=B1?= =?UTF-8?q?=D0=B0=D0=BD=D0=BE=D0=B2=20=D0=A2=D0=B5=D0=BC=D0=B8=D1=80=D0=BB?= =?UTF-8?q?=D0=B0=D0=BD?= Date: Mon, 24 Aug 2026 00:43:12 +0300 Subject: [PATCH 04/14] feat: add an index deletion method --- .../ru/project/collection/MyLinkedList.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/app/src/main/java/ru/project/collection/MyLinkedList.java b/app/src/main/java/ru/project/collection/MyLinkedList.java index 42ea519..1b1dc47 100644 --- a/app/src/main/java/ru/project/collection/MyLinkedList.java +++ b/app/src/main/java/ru/project/collection/MyLinkedList.java @@ -34,6 +34,31 @@ public class MyLinkedList implements MyList } throw new IllegalArgumentException(); } + public void remove(int index) + { + if (index == 0) + { + head = head.getNext(); + size--; + return; + + } + int currentIndex = 0; + Node temp = head; + while (temp != null) + { + if (currentIndex == index-1) + { + temp.setNext(temp.getNext().getNext()); + size--; + return; + } + else { + temp = temp.getNext(); + currentIndex++; + } + } + } public String toString() { Object[] res = new Object[size]; int index = 0; From a7861dd58a891881d00455c7495164be0131ae67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=93=D0=B0=D0=B4=D0=B6=D0=B8=D0=BA=D1=83=D1=80=D0=B1?= =?UTF-8?q?=D0=B0=D0=BD=D0=BE=D0=B2=20=D0=A2=D0=B5=D0=BC=D0=B8=D1=80=D0=BB?= =?UTF-8?q?=D0=B0=D0=BD?= Date: Mon, 24 Aug 2026 00:48:14 +0300 Subject: [PATCH 05/14] feat: The set method for setting the value of a node by index. --- .../main/java/ru/project/collection/MyLinkedList.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/app/src/main/java/ru/project/collection/MyLinkedList.java b/app/src/main/java/ru/project/collection/MyLinkedList.java index 1b1dc47..6ba300f 100644 --- a/app/src/main/java/ru/project/collection/MyLinkedList.java +++ b/app/src/main/java/ru/project/collection/MyLinkedList.java @@ -59,6 +59,17 @@ public class MyLinkedList implements MyList } } } + public T set(int index, T value) { + if (index < 0 || index >= size) { + throw new IllegalArgumentException(); + } + + Node temp = head; + for (int i = 0; i < index; i++) { + temp = temp.getNext(); + } + + public String toString() { Object[] res = new Object[size]; int index = 0; From 9e8fc5effb6453fa440db1a3d5d6f2eb1e74f747 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=93=D0=B0=D0=B4=D0=B6=D0=B8=D0=BA=D1=83=D1=80=D0=B1?= =?UTF-8?q?=D0=B0=D0=BD=D0=BE=D0=B2=20=D0=A2=D0=B5=D0=BC=D0=B8=D1=80=D0=BB?= =?UTF-8?q?=D0=B0=D0=BD?= Date: Mon, 24 Aug 2026 00:49:43 +0300 Subject: [PATCH 06/14] feat: add size() method to MyLinkedList --- app/src/main/java/ru/project/collection/MyLinkedList.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/src/main/java/ru/project/collection/MyLinkedList.java b/app/src/main/java/ru/project/collection/MyLinkedList.java index 6ba300f..4d54ab8 100644 --- a/app/src/main/java/ru/project/collection/MyLinkedList.java +++ b/app/src/main/java/ru/project/collection/MyLinkedList.java @@ -69,7 +69,14 @@ public class MyLinkedList implements MyList temp = temp.getNext(); } + T oldValue = (T) temp.getValue(); + temp.setValue(value); + return oldValue; + } + public int size() { + return size; + } public String toString() { Object[] res = new Object[size]; int index = 0; From e7db5fee4db500653c32571283ce046e4e3cf5a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=93=D0=B0=D0=B4=D0=B6=D0=B8=D0=BA=D1=83=D1=80=D0=B1?= =?UTF-8?q?=D0=B0=D0=BD=D0=BE=D0=B2=20=D0=A2=D0=B5=D0=BC=D0=B8=D1=80=D0=BB?= =?UTF-8?q?=D0=B0=D0=BD?= Date: Mon, 24 Aug 2026 00:52:09 +0300 Subject: [PATCH 07/14] feat: add an isEmpty() method that allows you to check whether the colle --- app/src/main/java/ru/project/collection/MyLinkedList.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/java/ru/project/collection/MyLinkedList.java b/app/src/main/java/ru/project/collection/MyLinkedList.java index 4d54ab8..7164857 100644 --- a/app/src/main/java/ru/project/collection/MyLinkedList.java +++ b/app/src/main/java/ru/project/collection/MyLinkedList.java @@ -77,6 +77,10 @@ public class MyLinkedList implements MyList public int size() { return size; } + public boolean isEmpty() + { + return size == 0; + } public String toString() { Object[] res = new Object[size]; int index = 0; From f855a760922fda49f019e5f00b18ee54c1c70306 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=93=D0=B0=D0=B4=D0=B6=D0=B8=D0=BA=D1=83=D1=80=D0=B1?= =?UTF-8?q?=D0=B0=D0=BD=D0=BE=D0=B2=20=D0=A2=D0=B5=D0=BC=D0=B8=D1=80=D0=BB?= =?UTF-8?q?=D0=B0=D0=BD?= Date: Tue, 25 Aug 2026 13:25:03 +0300 Subject: [PATCH 08/14] fix: correct minor syntax issues --- .../ru/project/collection/MyLinkedList.java | 28 ++++++++++--------- .../java/ru/project/collection/MyList.java | 2 +- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/ru/project/collection/MyLinkedList.java b/app/src/main/java/ru/project/collection/MyLinkedList.java index 7164857..23b2b75 100644 --- a/app/src/main/java/ru/project/collection/MyLinkedList.java +++ b/app/src/main/java/ru/project/collection/MyLinkedList.java @@ -1,13 +1,13 @@ +import java.util.Arrays; public class MyLinkedList implements MyList { - private Node head; + private Node head; private int size; - public void add(T value) { if (head == null) { this.head = new Node<>(value); } else { - Node temp = head; + Node temp = head; while (temp.getNext() != null) { temp = temp.getNext(); } @@ -18,12 +18,12 @@ public class MyLinkedList implements MyList public T get(int index) { int currentIndex = 0; - Node temp = head; + Node temp = head; while(temp != null) { if (currentIndex == index) { - return (T) temp.getValue(); + return temp.getValue(); } else { @@ -36,6 +36,9 @@ public class MyLinkedList implements MyList } public void remove(int index) { + if (index < 0 || index >= size) { + throw new IndexOutOfBoundsException(); + } if (index == 0) { head = head.getNext(); @@ -44,7 +47,7 @@ public class MyLinkedList implements MyList } int currentIndex = 0; - Node temp = head; + Node temp = head; while (temp != null) { if (currentIndex == index-1) @@ -64,16 +67,15 @@ public class MyLinkedList implements MyList throw new IllegalArgumentException(); } - Node temp = head; + Node temp = head; for (int i = 0; i < index; i++) { temp = temp.getNext(); } - T oldValue = (T) temp.getValue(); + T oldValue = temp.getValue(); temp.setValue(value); return oldValue; } - public int size() { return size; } @@ -81,10 +83,11 @@ public class MyLinkedList implements MyList { return size == 0; } + @Override public String toString() { Object[] res = new Object[size]; int index = 0; - Node temp = head; + Node temp = head; while (temp != null) { res[index] = temp.getValue(); index++; @@ -92,7 +95,8 @@ public class MyLinkedList implements MyList } return Arrays.toString(res); } - public static class Node { + + private static class Node { private T value; private Node next; @@ -116,6 +120,4 @@ public class MyLinkedList implements MyList return next; } } - - } \ No newline at end of file diff --git a/app/src/main/java/ru/project/collection/MyList.java b/app/src/main/java/ru/project/collection/MyList.java index e97132e..bd47567 100644 --- a/app/src/main/java/ru/project/collection/MyList.java +++ b/app/src/main/java/ru/project/collection/MyList.java @@ -8,7 +8,7 @@ public interface MyList { T set(int index, T element); - T remove(int index); + void remove(int index); int size(); From 2775c5fc430a0438588038ee30a2358282b5811c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BE=D0=BB=D0=BE=D0=B4=D0=B8=D0=BD=20=D0=93=D0=B5?= =?UTF-8?q?=D1=80=D0=BC=D0=B0=D0=BD?= Date: Sat, 22 Aug 2026 21:18:44 +0400 Subject: [PATCH 09/14] docs: add guide for dependencies between git branches --- GIT_BRANCH_DEPENDENCIES.ru.md | 122 ++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 GIT_BRANCH_DEPENDENCIES.ru.md diff --git a/GIT_BRANCH_DEPENDENCIES.ru.md b/GIT_BRANCH_DEPENDENCIES.ru.md new file mode 100644 index 0000000..f427e43 --- /dev/null +++ b/GIT_BRANCH_DEPENDENCIES.ru.md @@ -0,0 +1,122 @@ +# Работа с зависимостями между Git-ветками + +## Сценарий + +Предположим, мы находимся в ветке: + +```bash +feature/student +``` + +В этой ветке реализуется функциональность, связанная со `Student`. + +При этом у нас появляется новая, независимая по смыслу фича: + +```bash +feature/sorting +``` + +Для реализации сортировки нам необходим класс или интерфейс `Student`, который уже был создан в `feature/student`. + +## Как создать новую ветку + +Если нам необходимо продолжить разработку `feature/sorting`, используя текущее состояние `feature/student`, создаём новую ветку **от `feature/student`**. + +Сначала переключаемся на `feature/student`: + +```bash +git checkout feature/student +``` + +Затем создаём новую ветку: + +```bash +git branch feature/sorting +``` + +После этого история будет выглядеть примерно так: + +```text + feature/sorting + / +---------------● + \ + feature/student +``` + +Обе ветки на момент создания указывают на один и тот же коммит. + +Теперь в `feature/sorting` доступен весь код, который был добавлен в `feature/student`, в том числе `Student`. + +Чтобы перейти в новую ветку: + +```bash +git checkout feature/sorting +``` + +## Почему важно создавать ветку именно таким образом + +В данном случае `feature/sorting` зависит от кода, находящегося в `feature/student`. + +При этом сами фичи логически разные: + +- `feature/student` — разработка `Student`; +- `feature/sorting` — реализация сортировки; +- `Student` нужен в `feature/sorting` как зависимость для реализации сортировки. + +Поэтому не стоит продолжать разработку сортировки непосредственно в `feature/student`. Лучше создать отдельную ветку от того состояния, где необходимый код уже существует. + +--- + +## Если ветки уже разошлись + +Иногда невозможно создать `feature/sorting` непосредственно от нужного места в истории `feature/student`. + +Например, `feature/sorting` уже была создана раньше: + +```text +A---B---C---D feature/student + \ + E---F---G feature/sorting +``` + +В таком случае можно получить изменения из `feature/student` посредством слияния (merge). + +Находясь в `feature/sorting`, выполняем: + +```bash +git checkout feature/sorting +git merge feature/student +``` + +История станет примерно такой: + +```text +A---B---C---D feature/student + \ \ + E---F---G---M feature/sorting +``` + +Коммит `M` — результат слияния двух веток. + +После этого в `feature/sorting` будут доступны изменения из `feature/student`, в том числе необходимый `Student`. + +## Главное правило + +**Если новая фича зависит от кода из другой ветки, но при этом является самостоятельной по смыслу — создаём для неё отдельную ветку, используя нужную ветку как основу.** + +Если новую ветку можно создать непосредственно от нужного состояния исходной ветки: + +```bash +git checkout feature/student +git branch feature/sorting +``` + +Если ветки уже разошлись и создать её от нужного состояния невозможно: + +```bash +git checkout feature/sorting +git merge feature/student +``` + +Таким образом, мы сохраняем логическое разделение фич и одновременно можем использовать необходимый код из другой ветки. From 99255f392f0d9e7d7020eca6e5bbd2bc88e973d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D1=80=D1=82=D1=8E=D1=89=D0=B8=D0=BA=20=D0=90=D0=BD?= =?UTF-8?q?=D0=B0=D1=81=D1=82=D0=B0=D1=81=D0=B8=D1=8F?= Date: Sun, 23 Aug 2026 15:17:57 +0300 Subject: [PATCH 10/14] feat(student): add Student class --- .../main/java/ru/project/student/Student.java | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 app/src/main/java/ru/project/student/Student.java diff --git a/app/src/main/java/ru/project/student/Student.java b/app/src/main/java/ru/project/student/Student.java new file mode 100644 index 0000000..121aea5 --- /dev/null +++ b/app/src/main/java/ru/project/student/Student.java @@ -0,0 +1,38 @@ +package ru.project.student; + +public class Student { + private final String groupNumber; + private final double averageGrade; + private final String recordBookNumber; + + Student(String groupNumber, double averageGrade, String recordBookNumber) { + if (groupNumber == null || groupNumber.isBlank()) { + throw new IllegalArgumentException("Group number cannot be empty"); + } + if (averageGrade < 0.0 || averageGrade > 5.0) { + throw new IllegalArgumentException("Average grade must be between 0.0 and 5.0"); + } + if (recordBookNumber == null || recordBookNumber.isBlank()) { + throw new IllegalArgumentException("Record book number cannot be empty"); + } + this.groupNumber = groupNumber; + this.averageGrade = averageGrade; + this.recordBookNumber = recordBookNumber; + } + + public String getGroupNumber() { + return groupNumber; + } + + public double getAverageGrade() { + return averageGrade; + } + + public String getRecordBookNumber() { + return recordBookNumber; + } +@Override + public String toString(){ + return "Student ="+groupNumber+ +} +} From cdd33b6cf80e8917e46828dcc5bac172b60d7f90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D1=80=D1=82=D1=8E=D1=89=D0=B8=D0=BA=20=D0=90=D0=BD?= =?UTF-8?q?=D0=B0=D1=81=D1=82=D0=B0=D1=81=D0=B8=D1=8F?= Date: Sun, 23 Aug 2026 19:41:21 +0300 Subject: [PATCH 11/14] feat(student): update Student class --- .../main/java/ru/project/student/Student.java | 39 ++++++++++++++++--- .../ru/project/student/StudentBuilder.java | 4 ++ .../java/ru/project/student/StudentText.java | 4 ++ 3 files changed, 42 insertions(+), 5 deletions(-) create mode 100644 app/src/main/java/ru/project/student/StudentBuilder.java create mode 100644 app/src/test/java/ru/project/student/StudentText.java diff --git a/app/src/main/java/ru/project/student/Student.java b/app/src/main/java/ru/project/student/Student.java index 121aea5..2eaa6ed 100644 --- a/app/src/main/java/ru/project/student/Student.java +++ b/app/src/main/java/ru/project/student/Student.java @@ -1,5 +1,7 @@ package ru.project.student; +import java.util.Objects; + public class Student { private final String groupNumber; private final double averageGrade; @@ -31,8 +33,35 @@ public class Student { public String getRecordBookNumber() { return recordBookNumber; } -@Override - public String toString(){ - return "Student ="+groupNumber+ -} -} + + @Override + public String toString() { + return "Student{" + + "groupNumber='" + groupNumber + '\'' + + ", averageGrade=" + averageGrade + + ", recordBookNumber='" + recordBookNumber + '\'' + + '}'; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + + if (obj == null || getClass() != obj.getClass()) { + return false; + + } + Student student = (Student) obj; + + return Double.compare(averageGrade, student.averageGrade) == 0 + && Objects.equals(groupNumber, student.groupNumber) + && Objects.equals(recordBookNumber, student.recordBookNumber); + } + + @Override + public int hashCode() { + return Objects.hash(groupNumber, averageGrade, recordBookNumber); + } +} \ No newline at end of file diff --git a/app/src/main/java/ru/project/student/StudentBuilder.java b/app/src/main/java/ru/project/student/StudentBuilder.java new file mode 100644 index 0000000..a370f1f --- /dev/null +++ b/app/src/main/java/ru/project/student/StudentBuilder.java @@ -0,0 +1,4 @@ +package ru.project.student; + +public class StudentBuilder { +} diff --git a/app/src/test/java/ru/project/student/StudentText.java b/app/src/test/java/ru/project/student/StudentText.java new file mode 100644 index 0000000..cad3bef --- /dev/null +++ b/app/src/test/java/ru/project/student/StudentText.java @@ -0,0 +1,4 @@ +package ru.project.student; + +public class StudentText { +} From 4e53eb03f9c02cfff695c99fdc9e7ba163ab79d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D1=80=D1=82=D1=8E=D1=89=D0=B8=D0=BA=20=D0=90=D0=BD?= =?UTF-8?q?=D0=B0=D1=81=D1=82=D0=B0=D1=81=D0=B8=D1=8F?= Date: Sun, 23 Aug 2026 19:46:00 +0300 Subject: [PATCH 12/14] feat(student): add StudentBuilder --- .../ru/project/student/StudentBuilder.java | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/ru/project/student/StudentBuilder.java b/app/src/main/java/ru/project/student/StudentBuilder.java index a370f1f..3e1ec41 100644 --- a/app/src/main/java/ru/project/student/StudentBuilder.java +++ b/app/src/main/java/ru/project/student/StudentBuilder.java @@ -1,4 +1,26 @@ package ru.project.student; public class StudentBuilder { -} + private String groupNumber; + private double averageGrade; + private String recordBookNumber; + + public StudentBuilder setGroupNumber(String groupNumber) { + this.groupNumber = groupNumber; + return this; + } + + public StudentBuilder setAverageGrade(double averageGrade) { + this.averageGrade = averageGrade; + return this; + } + + public StudentBuilder setRecordBookNumber(String recordBookNumber) { + this.recordBookNumber = recordBookNumber; + return this; + } + + public Student build() { + return new Student(groupNumber, averageGrade, recordBookNumber); + } +} \ No newline at end of file From 5e71d2788537137313c162b9cd300b664e39d6a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D1=80=D1=82=D1=8E=D1=89=D0=B8=D0=BA=20=D0=90=D0=BD?= =?UTF-8?q?=D0=B0=D1=81=D1=82=D0=B0=D1=81=D0=B8=D1=8F?= Date: Mon, 24 Aug 2026 18:36:58 +0300 Subject: [PATCH 13/14] fix(student): add hashCode check to equals --- app/src/main/java/ru/project/student/Student.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/ru/project/student/Student.java b/app/src/main/java/ru/project/student/Student.java index 2eaa6ed..3e4332f 100644 --- a/app/src/main/java/ru/project/student/Student.java +++ b/app/src/main/java/ru/project/student/Student.java @@ -51,8 +51,12 @@ public class Student { if (obj == null || getClass() != obj.getClass()) { return false; - } + + if (this.hashCode() != obj.hashCode()) { + return false; + } + Student student = (Student) obj; return Double.compare(averageGrade, student.averageGrade) == 0 From caf2c95dbb295b656f9dae9ae014bb37ee0f319a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D1=80=D1=82=D1=8E=D1=89=D0=B8=D0=BA=20=D0=90=D0=BD?= =?UTF-8?q?=D0=B0=D1=81=D1=82=D0=B0=D1=81=D0=B8=D1=8F?= Date: Mon, 24 Aug 2026 21:14:09 +0300 Subject: [PATCH 14/14] test(student): add JUnit tests --- .../java/ru/project/student/StudentTest.java | 168 ++++++++++++++++++ .../java/ru/project/student/StudentText.java | 4 - 2 files changed, 168 insertions(+), 4 deletions(-) create mode 100644 app/src/test/java/ru/project/student/StudentTest.java delete mode 100644 app/src/test/java/ru/project/student/StudentText.java diff --git a/app/src/test/java/ru/project/student/StudentTest.java b/app/src/test/java/ru/project/student/StudentTest.java new file mode 100644 index 0000000..e9a7434 --- /dev/null +++ b/app/src/test/java/ru/project/student/StudentTest.java @@ -0,0 +1,168 @@ +package ru.project.student; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertNotEquals; + + +class StudentTest { + @Test + void shouldCreateValidStudent() { + Student student = new StudentBuilder() + .setGroupNumber("101") + .setAverageGrade(4.5) + .setRecordBookNumber("12345") + .build(); + + assertEquals("101", student.getGroupNumber()); + assertEquals(4.5, student.getAverageGrade()); + assertEquals("12345", student.getRecordBookNumber()); + } + + @Test + void shouldThrowExceptionWhenGroupNumberIsEmpty() { + assertThrows(IllegalArgumentException.class, () -> { + new StudentBuilder() + .setGroupNumber("") + .setAverageGrade(4.5) + .setRecordBookNumber("12345") + .build(); + }); + } + + @Test + void shouldThrowExceptionWhenAverageGradeIsGreaterThanFive() { + assertThrows(IllegalArgumentException.class, () -> { + new StudentBuilder() + .setGroupNumber("101") + .setAverageGrade(6.0) + .setRecordBookNumber("12345") + .build(); + }); + } + + @Test + void shouldThrowExceptionWhenAverageGradeIsLessThanZero() { + assertThrows(IllegalArgumentException.class, () -> { + new StudentBuilder() + .setGroupNumber("101") + .setAverageGrade(-1.0) + .setRecordBookNumber("12345") + .build(); + }); + } + + @Test + void shouldCreateStudentWhenAverageGradeIsZero() { + Student student = new StudentBuilder() + .setGroupNumber("101") + .setAverageGrade(0.0) + .setRecordBookNumber("12345") + .build(); + + assertEquals(0.0, student.getAverageGrade()); + } + + @Test + void shouldCreateStudentWhenAverageGradeIsFive() { + Student student = new StudentBuilder() + .setGroupNumber("101") + .setAverageGrade(5.0) + .setRecordBookNumber("12345") + .build(); + + assertEquals(5.0, student.getAverageGrade()); + } + + @Test + void shouldThrowExceptionWhenRecordBookNumberIsEmpty() { + assertThrows(IllegalArgumentException.class, () -> { + new StudentBuilder() + .setGroupNumber("101") + .setAverageGrade(4.5) + .setRecordBookNumber("") + .build(); + }); + } + + @Test + void shouldThrowExceptionWhenGroupNumberIsNull() { + assertThrows(IllegalArgumentException.class, () -> { + new StudentBuilder() + .setGroupNumber(null) + .setAverageGrade(4.5) + .setRecordBookNumber("12345") + .build(); + }); + } + + @Test + void shouldThrowExceptionWhenGroupNumberIsBlank() { + assertThrows(IllegalArgumentException.class, () -> { + new StudentBuilder() + .setGroupNumber(" ") + .setAverageGrade(4.5) + .setRecordBookNumber("12345") + .build(); + }); + } + + @Test + void shouldThrowExceptionWhenRecordBookNumberIsNull() { + assertThrows(IllegalArgumentException.class, () -> { + new StudentBuilder() + .setGroupNumber("101") + .setAverageGrade(4.5) + .setRecordBookNumber(null) + .build(); + }); + } + + @Test + void shouldThrowExceptionWhenRecordBookNumberIsBlank() { + assertThrows(IllegalArgumentException.class, () -> { + new StudentBuilder() + .setGroupNumber("101") + .setAverageGrade(4.5) + .setRecordBookNumber(" ") + .build(); + }); + } + + @Test + void shouldReturnTrueWhenStudentsAreEqual() { + Student student1 = new StudentBuilder() + .setGroupNumber("101") + .setAverageGrade(4.5) + .setRecordBookNumber("12345") + .build(); + + Student student2 = new StudentBuilder() + .setGroupNumber("101") + .setAverageGrade(4.5) + .setRecordBookNumber("12345") + .build(); + + assertEquals(student1, student2); + assertEquals(student1.hashCode(), student2.hashCode()); + } + + @Test + void shouldReturnFalseWhenStudentsAreDifferent() { + Student student1 = new StudentBuilder() + .setGroupNumber("101") + .setAverageGrade(4.5) + .setRecordBookNumber("12345") + .build(); + + Student student2 = new StudentBuilder() + .setGroupNumber("102") + .setAverageGrade(4.5) + .setRecordBookNumber("12345") + .build(); + + assertNotEquals(student1, student2); + } +} diff --git a/app/src/test/java/ru/project/student/StudentText.java b/app/src/test/java/ru/project/student/StudentText.java deleted file mode 100644 index cad3bef..0000000 --- a/app/src/test/java/ru/project/student/StudentText.java +++ /dev/null @@ -1,4 +0,0 @@ -package ru.project.student; - -public class StudentText { -}