diff --git a/lesson/lesson1.md b/lesson/lesson1.md index 73fc4529..535c88c1 100644 --- a/lesson/lesson1.md +++ b/lesson/lesson1.md @@ -66,7 +66,7 @@ ![Screenshot_5](https://user-images.githubusercontent.com/29703461/199550057-fce7cf3c-7040-422f-b490-7b85b47ae952.png) -- Реализуйте методы `save, get, delete, clear, getAll, size` в классе `ArrayStorage`, организовав хранение резюме в массиве +- Реализуйте методы `save, get, delete, clear, getAll, size` в классе `com.urise.webapp.storage.ArrayStorage`, организовав хранение резюме в массиве - Храните все резюме в начале `storage` (без пустот в виде `null`), чтобы не перебирать каждый раз все 10_000 элементов - При реализации метода `delete` учитывайте, что после удаления резюме между оставшимися резюме не должно быть пустых ячеек, заполненных null ``` @@ -95,11 +95,11 @@ r1, r2, r3,..., rn, null, null,..., null 1. Перед каждым коммитом не забывайте пользоваться сочетанием клавиш `Ctrl + Alt + L` (автоматическое форматирование кода) 1. Удаляйте в классах неиспользуемые импорты (`Ctrl + Alt + O`) 1. Не игнорируй подсказки IDEA (подсвечивает) -1. В методе `clear()` обнуление массива предполагает обнуление (null) ячеек, где хранятся Resume, а не создание нового или присваивание ему null +1. В методе `clear()` обнуление массива предполагает обнуление (null) ячеек, где хранятся com.urise.webapp.model.Resume, а не создание нового или присваивание ему null 1. При реализации методов не используйте коллекции -1. Не меняйте сигнатуры методов в `ArrayStorage` -1. Не добавляйте в `Resume` новые поля -1. Resume r — давайте переменным осмысленные имена, например resume. r допустимо в коротких циклах и лямбда-выражениях +1. Не меняйте сигнатуры методов в `com.urise.webapp.storage.ArrayStorage` +1. Не добавляйте в `com.urise.webapp.model.Resume` новые поля +1. com.urise.webapp.model.Resume r — давайте переменным осмысленные имена, например resume. r допустимо в коротких циклах и лямбда-выражениях ## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 5. [Вебинар "Быть программистом: от детства к зрелости"](https://www.youtube.com/watch?v=D5Hej0TyLaU) - [Слайды вебинара](https://docs.google.com/presentation/d/1YwtCCZsaGMdl-V15kTDHiJxiS52IAl-qqheNPpiNr54/) diff --git a/src/ArrayStorage.java b/src/ArrayStorage.java deleted file mode 100644 index f4ae4369..00000000 --- a/src/ArrayStorage.java +++ /dev/null @@ -1,52 +0,0 @@ -import java.util.Arrays; - -/** - * Array based storage for Resumes - */ -public class ArrayStorage { - - Resume[] storage = new Resume[10000]; - private int storageSize; - - void clear() { - for (int i = 0; i < storageSize; i++) { - storage[i] = null; - } - storageSize = 0; - } - - void save(Resume r) { - storage[storageSize++] = r; - } - - Resume get(String uuid) { - for (int i = 0; i < storageSize; i++) { - if (uuid.equals(storage[i].uuid)) { - return storage[i]; - } - } - return null; - } - - void delete(String uuid) { - for (int i = 0; i < storageSize; i++) { - if (uuid.equals(storage[i].uuid)) { - storageSize--; - storage[i] = storage[storageSize]; - storage[storageSize] = null; - break; - } - } - } - - /** - * @return array, contains only Resumes in storage (without null) - */ - Resume[] getAll() { - return Arrays.copyOf(storage, storageSize); - } - - int size() { - return storageSize; - } -} diff --git a/src/MainArray.java b/src/MainArray.java index 063364db..4ee2c3ca 100644 --- a/src/MainArray.java +++ b/src/MainArray.java @@ -1,9 +1,11 @@ +import com.urise.webapp.model.Resume; +import com.urise.webapp.storage.ArrayStorage; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; /** - * Interactive test for ArrayStorage implementation + * Interactive test for com.urise.webapp.storage.ArrayStorage implementation * (just run, no need to understand) */ public class MainArray { @@ -13,7 +15,8 @@ public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); Resume r; while (true) { - System.out.print("Введите одну из команд - (list | size | save uuid | delete uuid | get uuid | clear | exit): "); + System.out.print("Введите одну из команд - " + + "(list | update uuid | size | save uuid | delete uuid | get uuid | clear | exit): "); String[] params = reader.readLine().trim().toLowerCase().split(" "); if (params.length < 1 || params.length > 2) { System.out.println("Неверная команда."); @@ -27,12 +30,18 @@ public static void main(String[] args) throws IOException { case "list": printAll(); break; + case "update": + r = new Resume(); + r.setUuid(uuid); + ARRAY_STORAGE.update(r); + printAll(); + break; case "size": System.out.println(ARRAY_STORAGE.size()); break; case "save": r = new Resume(); - r.uuid = uuid; + r.setUuid(uuid); ARRAY_STORAGE.save(r); printAll(); break; diff --git a/src/MainTestArrayStorage.java b/src/MainTestArrayStorage.java index b15b81e2..586a03d9 100644 --- a/src/MainTestArrayStorage.java +++ b/src/MainTestArrayStorage.java @@ -1,28 +1,31 @@ +import com.urise.webapp.model.Resume; +import com.urise.webapp.storage.ArrayStorage; + /** - * Test for your ArrayStorage implementation + * Test for your com.urise.webapp.storage.ArrayStorage implementation */ public class MainTestArrayStorage { static final ArrayStorage ARRAY_STORAGE = new ArrayStorage(); public static void main(String[] args) { Resume r1 = new Resume(); - r1.uuid = "uuid1"; + r1.setUuid("uuid1"); Resume r2 = new Resume(); - r2.uuid = "uuid2"; + r2.setUuid("uuid2"); Resume r3 = new Resume(); - r3.uuid = "uuid3"; + r3.setUuid("uuid3"); ARRAY_STORAGE.save(r1); ARRAY_STORAGE.save(r2); ARRAY_STORAGE.save(r3); - System.out.println("Get r1: " + ARRAY_STORAGE.get(r1.uuid)); + System.out.println("Get r1: " + ARRAY_STORAGE.get(r1.getUuid())); System.out.println("Size: " + ARRAY_STORAGE.size()); System.out.println("Get dummy: " + ARRAY_STORAGE.get("dummy")); printAll(); - ARRAY_STORAGE.delete(r1.uuid); + ARRAY_STORAGE.delete(r1.getUuid()); printAll(); ARRAY_STORAGE.clear(); printAll(); diff --git a/src/Resume.java b/src/Resume.java deleted file mode 100644 index 8de4e4b8..00000000 --- a/src/Resume.java +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Initial resume class - */ -public class Resume { - - // Unique identifier - String uuid; - - @Override - public String toString() { - return uuid; - } -} diff --git a/src/com/urise/webapp/model/Resume.java b/src/com/urise/webapp/model/Resume.java new file mode 100644 index 00000000..93db9f2c --- /dev/null +++ b/src/com/urise/webapp/model/Resume.java @@ -0,0 +1,23 @@ +package com.urise.webapp.model; + +/** + * Initial resume class + */ +public class Resume { + + // Unique identifier + private String uuid; + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + @Override + public String toString() { + return uuid; + } +} diff --git a/src/com/urise/webapp/storage/ArrayStorage.java b/src/com/urise/webapp/storage/ArrayStorage.java new file mode 100644 index 00000000..943e4598 --- /dev/null +++ b/src/com/urise/webapp/storage/ArrayStorage.java @@ -0,0 +1,77 @@ +package com.urise.webapp.storage; + +import com.urise.webapp.model.Resume; +import java.util.Arrays; + +/** + * Array based storage for Resumes + */ +public class ArrayStorage { + + private Resume[] storage = new Resume[10000]; + private int storageSize; + + public void clear() { + for (int i = 0; i < storageSize; i++) { + storage[i] = null; + } + storageSize = 0; + } + + public void update(Resume r) { + int index = getPresentResumeIndex(r.getUuid()); + if (index >= 0) { + storage[index] = r; + } else { + System.out.println("There are not resume with this uuid!"); + } + } + + public void save(Resume r) { + int index = getPresentResumeIndex(r.getUuid()); + if (index == -1) { + storage[storageSize++] = r; + } else { + System.out.println("This resume already exists!"); + } + } + + public Resume get(String uuid) { + int index = getPresentResumeIndex(uuid); + if (index >= 0) { + return storage[index]; + } + return null; + } + + public void delete(String uuid) { + int index = getPresentResumeIndex(uuid); + if (index >= 0) { + storageSize--; + storage[index] = storage[storageSize]; + storage[storageSize] = null; + } else { + System.out.println("There are not resume with this uuid!"); + } + } + + /** + * @return array, contains only Resumes in storage (without null) + */ + public Resume[] getAll() { + return Arrays.copyOf(storage, storageSize); + } + + public int size() { + return storageSize; + } + + private int getPresentResumeIndex(String uuid) { + for (int i = 0; i < storageSize; i++) { + if (uuid.equals(storage[i].getUuid())) { + return i; + } + } + return -1; + } +}