From 0a7fd2a162e277ac89f34379396f76733a23bca1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C5=A1per=20Dobrovoljc?= Date: Fri, 4 Apr 2025 21:52:40 +0200 Subject: [PATCH] Naloga 2 --- naloga2/src/Main.java | 28 ++++---- naloga2/src/TabelaTabel.java | 39 ++++++++++- naloga2/src/TabelaTabelOld.java | 114 -------------------------------- 3 files changed, 50 insertions(+), 131 deletions(-) delete mode 100644 naloga2/src/TabelaTabelOld.java diff --git a/naloga2/src/Main.java b/naloga2/src/Main.java index 01b87a5..077de8d 100644 --- a/naloga2/src/Main.java +++ b/naloga2/src/Main.java @@ -4,23 +4,23 @@ public class Main { TabelaTabel tabelaTabel = new TabelaTabel(comparator); - tabelaTabel.vstavi("a"); - tabelaTabel.vstavi("bb"); - tabelaTabel.vstavi("bbb"); + tabelaTabel.vstavi("abc"); tabelaTabel.vstavi("abcd"); - tabelaTabel.vstavi("ccc"); - tabelaTabel.vstavi("dddd"); - tabelaTabel.vstavi("dddd"); + tabelaTabel.vstavi("dca"); tabelaTabel.izpisi(); -// tabelaTabel.najdi("abcd"); -// -// tabelaTabel.izpisi(); -// -// tabelaTabel.vstavi("kdfj"); -// tabelaTabel.vstavi("asf"); -// -// tabelaTabel.izpisi(); + tabelaTabel.izbrisi("dca"); + + tabelaTabel.izpisi(); + + tabelaTabel.izbrisi("abcd"); + + tabelaTabel.izpisi(); + + tabelaTabel.izbrisi("abc"); + tabelaTabel.izbrisi("dca"); + + tabelaTabel.izpisi(); } } diff --git a/naloga2/src/TabelaTabel.java b/naloga2/src/TabelaTabel.java index 121f5db..7b4c153 100644 --- a/naloga2/src/TabelaTabel.java +++ b/naloga2/src/TabelaTabel.java @@ -18,7 +18,7 @@ class Item { public class TabelaTabel { private final Comparator comparator; private Item[][] array = new Item[0][]; - private int size; + private int size = 0, count = 0; public TabelaTabel(Comparator comparator) { this.comparator = comparator; @@ -60,6 +60,18 @@ public class TabelaTabel { } public void vstavi(String element) { + for (int i = 0; i < getSubarrayCount(); i++) { + if (array[i] == null) { + continue; + } + for (int j = 0; j < array[i].length; j++) { + if (comparator.compare(array[i][j].value, element) == 0) { + array[i][j].count++; + return; + } + } + } + Item[] tmp = {new Item(element)}; boolean success = false; @@ -88,6 +100,7 @@ public class TabelaTabel { } size++; + count++; } public void najdi(String element) { @@ -105,8 +118,28 @@ public class TabelaTabel { System.out.println("false"); } + public void izbrisi(String element) { + for (int i = 0; i < getSubarrayCount(); i++) { + if (array[i] == null) { + continue; + } + for (int j = 0; j < array[i].length; j++) { + if (array[i][j] != null && comparator.compare(array[i][j].value, element) == 0) { + System.out.println("true"); + array[i][j].count--; + if (array[i][j].count == 0) { + array[i][j] = null; + count--; + } + return; + } + } + } + System.out.println("false"); + } + public void izpisi() { - if (size == 0) { + if (count == 0) { System.out.println("prazen"); return; } @@ -123,7 +156,7 @@ public class TabelaTabel { System.out.print(", "); } if (array[i][j] == null) { - System.out.println("x"); + System.out.print("x"); } else { System.out.printf("%s/%d", array[i][j].value, array[i][j].count); } diff --git a/naloga2/src/TabelaTabelOld.java b/naloga2/src/TabelaTabelOld.java deleted file mode 100644 index 2ddec79..0000000 --- a/naloga2/src/TabelaTabelOld.java +++ /dev/null @@ -1,114 +0,0 @@ -import java.util.Comparator; - -public class TabelaTabelOld { - Comparator comparator; - Item[] array = new Item[32]; - int size = 0; - - TabelaTabelOld(Comparator comparator) { - this.comparator = comparator; - } - - private boolean isFull() { - return size >= array.length; - } - - private void resize() { - Item[] tmp = new Item[array.length * 2]; - System.arraycopy(array, 0, tmp, 0, array.length); - array = tmp; - } - - private int getSubarrayCount() { - if (size == 0) { - return 0; - } - return (int) (Math.log(size) / Math.log(2)) + 1; - } - - private boolean isSubarrayFull(int i) { - return ((size >> i) & 1) != 0; - } - - void vstavi(String element) { - Item[] tmp = {new Item(element)}; - boolean success = false; - int k = getSubarrayCount(); - for (int i = 0; i < k; i++) { - if (isSubarrayFull(i)) { - // Append subarray to tmp - int subArrLen = 1 << i; - int subArrStartIndex = subArrLen - 1; - Item[] newTmp = new Item[tmp.length + subArrLen]; -// System.arraycopy(tmp, 0, newTmp, 0, tmp.length); -// System.arraycopy(array, subArrLen - 1, newTmp, tmp.length, subArrLen); - -// int j = 0, l = 0, r = 0; -// while (l < tmp.length && r < subArrLen) { -// newTmp[j++] = comparator.compare(tmp[l], array[subArrStartIndex + r]) < 0 ? tmp[l] : array[subArrStartIndex + r]; -// } - - tmp = newTmp; - } else { - // Set subarray to tmp - System.arraycopy(tmp, 0, array, i, tmp.length); - success = true; - break; - } - } - - if (!success) { - // Crate new subarray with size k and add tmp to it - if (isFull()) { - resize(); - } - System.arraycopy(tmp, 0, array, k, tmp.length); - } - - size++; - } - - int findIndex(String element) { - int[][] arr = new int[10][]; - arr[0] = new int[10]; - arr[1] = new int[5]; - - return -1; - } - - void najdi(String element) { - - } - - void izbrisi(String element) { - - } - - void izpisi() { - if (size == 0) { - System.out.println("prazen"); - return; - } - - for (int i = 0; i < getSubarrayCount(); i++) { - if (!isSubarrayFull(i)) { - System.out.println("..."); - continue; - } - - int startIndex = i == 0 ? 0 : 1 << (i - 1); - int subArrLen = 1 << i; - for (int j = startIndex; j < startIndex + subArrLen; j++) { - if (j > startIndex) { - System.out.print(", "); - } - if (array[j] == null) { - System.out.print("x"); - } else { - System.out.printf("%s/%d", array[j].value, array[j].count); - } - } - System.out.println(); - } - } -}