From 9a88687d8855ecda5ea739ac2961eb7f07357d0a Mon Sep 17 00:00:00 2001 From: lbrdev Date: Tue, 21 Feb 2017 21:00:04 +0200 Subject: [PATCH 1/2] generics.hw1 done --- .../changerequest/java/generics/.gitkeep | 0 .../java/generics/Container/Container.java | 74 +++++++++++++++++++ .../java/generics/Container/ContainerApp.java | 31 ++++++++ .../Container/ContainerInterface.java | 49 ++++++++++++ .../java/generics/Generator/Demo.java | 14 ++++ .../generics/Generator/DoubleGenerator.java | 24 ++++++ .../Generator/DoubleSumCalculator.java | 12 +++ .../generics/Generator/IntegerGenerator.java | 15 ++++ .../Generator/IntegerSumCalculator.java | 12 +++ .../generics/Generator/NumberGenerator.java | 7 ++ .../java/generics/Generator/Printer.java | 20 +++++ .../generics/Generator/SumCalculator.java | 7 ++ .../java/generics/Pairs/Pair.java | 24 ++++++ .../java/generics/Pairs/PairApp.java | 32 ++++++++ .../java/generics/Pairs/PairUtils.java | 58 +++++++++++++++ 15 files changed, 379 insertions(+) delete mode 100644 src/main/java/school/lemon/changerequest/java/generics/.gitkeep create mode 100644 src/main/java/school/lemon/changerequest/java/generics/Container/Container.java create mode 100644 src/main/java/school/lemon/changerequest/java/generics/Container/ContainerApp.java create mode 100644 src/main/java/school/lemon/changerequest/java/generics/Container/ContainerInterface.java create mode 100644 src/main/java/school/lemon/changerequest/java/generics/Generator/Demo.java create mode 100644 src/main/java/school/lemon/changerequest/java/generics/Generator/DoubleGenerator.java create mode 100644 src/main/java/school/lemon/changerequest/java/generics/Generator/DoubleSumCalculator.java create mode 100644 src/main/java/school/lemon/changerequest/java/generics/Generator/IntegerGenerator.java create mode 100644 src/main/java/school/lemon/changerequest/java/generics/Generator/IntegerSumCalculator.java create mode 100644 src/main/java/school/lemon/changerequest/java/generics/Generator/NumberGenerator.java create mode 100644 src/main/java/school/lemon/changerequest/java/generics/Generator/Printer.java create mode 100644 src/main/java/school/lemon/changerequest/java/generics/Generator/SumCalculator.java create mode 100644 src/main/java/school/lemon/changerequest/java/generics/Pairs/Pair.java create mode 100644 src/main/java/school/lemon/changerequest/java/generics/Pairs/PairApp.java create mode 100644 src/main/java/school/lemon/changerequest/java/generics/Pairs/PairUtils.java diff --git a/src/main/java/school/lemon/changerequest/java/generics/.gitkeep b/src/main/java/school/lemon/changerequest/java/generics/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/src/main/java/school/lemon/changerequest/java/generics/Container/Container.java b/src/main/java/school/lemon/changerequest/java/generics/Container/Container.java new file mode 100644 index 0000000..01b8b51 --- /dev/null +++ b/src/main/java/school/lemon/changerequest/java/generics/Container/Container.java @@ -0,0 +1,74 @@ +package school.lemon.changerequest.java.generics.Container; + + +public class Container implements ContainerInterface { + + private T[] array; + private int size; + + public Container() { + this.array = (T[]) new Object[INITIAL_ARRAY_SIZE]; + } + + + @Override + public int size() { + return size; + } + + @Override + public void clear() { + size = 0; + } + + @Override + public T get(int index) { + if (index < 0 || index >= size) { + return null; + } else return array[index]; + } + + @Override + public boolean add(Object element, int index) { + if (index < 0 || index > size) return false; + checkSize(); + System.arraycopy(array, index, array, index + 1, size - index); + array[index] = (T) element; + ++size; + return true; + } + + + @Override + public boolean remove(int index) { + if (index < 0 || index >= size) + return false; + System.arraycopy(array, index + 1, array, index, size - index - 1); + --size; + return true; + } + + @Override + public void add(Object element) { + checkSize(); + array[size++] = (T) element; + + } + + public void checkSize() { + if (size == array.length) { + + T[] newArray = (T[]) new Object[array.length * 2]; + System.arraycopy(array, 0, newArray, 0, array.length); + array = newArray; + } + } + + public String toString() { + StringBuilder containerToString = new StringBuilder(); + for (int i = 0; i < size; i++) { + containerToString.append(array[i]).append(" "); + } + return String.valueOf(containerToString); + } +} diff --git a/src/main/java/school/lemon/changerequest/java/generics/Container/ContainerApp.java b/src/main/java/school/lemon/changerequest/java/generics/Container/ContainerApp.java new file mode 100644 index 0000000..83d23d3 --- /dev/null +++ b/src/main/java/school/lemon/changerequest/java/generics/Container/ContainerApp.java @@ -0,0 +1,31 @@ +package school.lemon.changerequest.java.generics.Container; + + +public class ContainerApp { + public static void main(String[] args) { + + Container container = new Container<>(); + container.add("word"); + container.add(234); + container.add(""); + container.add(.4432); + container.add(5); + container.add(6); + container.add(7); + container.add(8); + container.add(9); + container.add(10); + System.out.format("Add element in container: %s \n", container.toString()); + container.add("add"); + System.out.format("Add element in index bigger then size: %s \n", container.toString()); + System.out.format("Get element by index: %s \n", container.get(0)); + System.out.format("Get element by index bigger then size: %s \n", container.get(15)); + container.add(33, 11); + System.out.format("Add element by index: %s \n", container.toString()); + container.remove(3); + System.out.format("Remove element by index: %s \n", container.toString()); + container.clear(); + System.out.format("Clear container: %s \n", container.toString()); + System.out.format("Try to get element after clear container: %s \n", container.get(0)); + } +} \ No newline at end of file diff --git a/src/main/java/school/lemon/changerequest/java/generics/Container/ContainerInterface.java b/src/main/java/school/lemon/changerequest/java/generics/Container/ContainerInterface.java new file mode 100644 index 0000000..62931e0 --- /dev/null +++ b/src/main/java/school/lemon/changerequest/java/generics/Container/ContainerInterface.java @@ -0,0 +1,49 @@ +package school.lemon.changerequest.java.generics.Container; + + +public interface ContainerInterface { + + int INITIAL_ARRAY_SIZE = 10; + + /** + * Get current size of container + * + * @return current size of container + */ + int size(); + + /** + * Clear container + */ + void clear(); + + /** + * Get element by {@code index} + * + * @param index of the element + * @return element at specified {@code index} or {@code null} in case {@code index < 0 || index >= size} + */ + T get(int index); + + + /** + * Add element at specified {@code index} of container + * In case {@code index < 0 || index > size} - do not add element. + * + * @param element to add + * @param index of the element + * @return true if element was successfully added, otherwise - false. + */ + boolean add(T element, int index); + + /** + * Removes element in specified index + * + * @param index of the element + * @return true if element was successfully deleted, otherwise - false. + */ + boolean remove(int index); + + public void add(T element); + +} diff --git a/src/main/java/school/lemon/changerequest/java/generics/Generator/Demo.java b/src/main/java/school/lemon/changerequest/java/generics/Generator/Demo.java new file mode 100644 index 0000000..968e4a7 --- /dev/null +++ b/src/main/java/school/lemon/changerequest/java/generics/Generator/Demo.java @@ -0,0 +1,14 @@ +package school.lemon.changerequest.java.generics.Generator; + +public class Demo { + public static void main(String[] args) { + DoubleGenerator doubleGenerator = new DoubleGenerator(); + Printer printer1 = new Printer(doubleGenerator); + IntegerGenerator integerGenerator = new IntegerGenerator(); + Printer printer2 = new Printer(integerGenerator); + printer1.generateAndPrint(); + printer2.generateAndPrint(); + + + } +} diff --git a/src/main/java/school/lemon/changerequest/java/generics/Generator/DoubleGenerator.java b/src/main/java/school/lemon/changerequest/java/generics/Generator/DoubleGenerator.java new file mode 100644 index 0000000..65dbff1 --- /dev/null +++ b/src/main/java/school/lemon/changerequest/java/generics/Generator/DoubleGenerator.java @@ -0,0 +1,24 @@ +package school.lemon.changerequest.java.generics.Generator; + +import java.util.Random; + +public class DoubleGenerator extends NumberGenerator { + + + @Override + public Double[] generateNumbers() { + Double[] arrayDouble = new Double[DEFAULT_SIZE_TEN]; + for (int i = 0; i < DEFAULT_SIZE_TEN; i++) { + arrayDouble[i] = new Random().nextDouble(); + } + return arrayDouble; + } + + public Double calcSumForDouble(Double[] array) { + Double sum = .0; + for (int i = 0; i < array.length; i++) { + sum += array[i]; + } + return sum; + } +} diff --git a/src/main/java/school/lemon/changerequest/java/generics/Generator/DoubleSumCalculator.java b/src/main/java/school/lemon/changerequest/java/generics/Generator/DoubleSumCalculator.java new file mode 100644 index 0000000..16a83c8 --- /dev/null +++ b/src/main/java/school/lemon/changerequest/java/generics/Generator/DoubleSumCalculator.java @@ -0,0 +1,12 @@ +package school.lemon.changerequest.java.generics.Generator; + +public class DoubleSumCalculator extends SumCalculator { + @Override + public Double calculateSum(Double[] array) { + Double sum = .0; + for (Double anArray : array) { + sum += anArray; + } + return sum; + } +} diff --git a/src/main/java/school/lemon/changerequest/java/generics/Generator/IntegerGenerator.java b/src/main/java/school/lemon/changerequest/java/generics/Generator/IntegerGenerator.java new file mode 100644 index 0000000..180cfd3 --- /dev/null +++ b/src/main/java/school/lemon/changerequest/java/generics/Generator/IntegerGenerator.java @@ -0,0 +1,15 @@ +package school.lemon.changerequest.java.generics.Generator; + +import java.util.Random; + +public class IntegerGenerator extends NumberGenerator { + + @Override + public Integer[] generateNumbers() { + Integer[] arrayInt = new Integer[DEFAULT_SIZE_TEN]; + for (int i = 0; i < DEFAULT_SIZE_TEN; i++) { + arrayInt[i] = new Random().nextInt(); + } + return arrayInt; + } +} diff --git a/src/main/java/school/lemon/changerequest/java/generics/Generator/IntegerSumCalculator.java b/src/main/java/school/lemon/changerequest/java/generics/Generator/IntegerSumCalculator.java new file mode 100644 index 0000000..1fab016 --- /dev/null +++ b/src/main/java/school/lemon/changerequest/java/generics/Generator/IntegerSumCalculator.java @@ -0,0 +1,12 @@ +package school.lemon.changerequest.java.generics.Generator; + +public class IntegerSumCalculator extends SumCalculator { + @Override + public Integer calculateSum(Integer[] array) { + Integer sum = 0; + for (Integer anArray : array) { + sum += anArray; + } + return sum; + } +} diff --git a/src/main/java/school/lemon/changerequest/java/generics/Generator/NumberGenerator.java b/src/main/java/school/lemon/changerequest/java/generics/Generator/NumberGenerator.java new file mode 100644 index 0000000..ab04c45 --- /dev/null +++ b/src/main/java/school/lemon/changerequest/java/generics/Generator/NumberGenerator.java @@ -0,0 +1,7 @@ +package school.lemon.changerequest.java.generics.Generator; + +public abstract class NumberGenerator { + static int DEFAULT_SIZE_TEN = 10; + + public abstract T[] generateNumbers(); +} diff --git a/src/main/java/school/lemon/changerequest/java/generics/Generator/Printer.java b/src/main/java/school/lemon/changerequest/java/generics/Generator/Printer.java new file mode 100644 index 0000000..06f2fa9 --- /dev/null +++ b/src/main/java/school/lemon/changerequest/java/generics/Generator/Printer.java @@ -0,0 +1,20 @@ +package school.lemon.changerequest.java.generics.Generator; + +public class Printer { + NumberGenerator numberGenerator; + SumCalculator sum; + + public Printer(NumberGenerator numberGenerator) { + this.numberGenerator = numberGenerator; + } + + public void generateAndPrint() { + T[] arrayNumbers = numberGenerator.generateNumbers(); + if (numberGenerator instanceof IntegerGenerator) { + sum = (SumCalculator) new IntegerSumCalculator(); + } else { + sum = (SumCalculator) new DoubleSumCalculator(); + } + System.out.println(sum.calculateSum(arrayNumbers)); + } +} diff --git a/src/main/java/school/lemon/changerequest/java/generics/Generator/SumCalculator.java b/src/main/java/school/lemon/changerequest/java/generics/Generator/SumCalculator.java new file mode 100644 index 0000000..60bba16 --- /dev/null +++ b/src/main/java/school/lemon/changerequest/java/generics/Generator/SumCalculator.java @@ -0,0 +1,7 @@ +package school.lemon.changerequest.java.generics.Generator; + +public abstract class SumCalculator { + + public abstract T calculateSum(T[] array); + +} diff --git a/src/main/java/school/lemon/changerequest/java/generics/Pairs/Pair.java b/src/main/java/school/lemon/changerequest/java/generics/Pairs/Pair.java new file mode 100644 index 0000000..c52106c --- /dev/null +++ b/src/main/java/school/lemon/changerequest/java/generics/Pairs/Pair.java @@ -0,0 +1,24 @@ +package school.lemon.changerequest.java.generics.Pairs; + +/** + * Created by lbrdev on 21.02.2017. + * Project: generics.hw1 + */ +public class Pair { + + public K key; + public V value; + + public Pair(K key, V value) { + this.key = key; + this.value = value; + } + + public K getKey() { + return key; + } + + public V getValue() { + return value; + } +} diff --git a/src/main/java/school/lemon/changerequest/java/generics/Pairs/PairApp.java b/src/main/java/school/lemon/changerequest/java/generics/Pairs/PairApp.java new file mode 100644 index 0000000..390f145 --- /dev/null +++ b/src/main/java/school/lemon/changerequest/java/generics/Pairs/PairApp.java @@ -0,0 +1,32 @@ +package school.lemon.changerequest.java.generics.Pairs; + +import java.util.Arrays; + +/** + * Created by lbrdev on 21.02.2017. + * Project: generics.hw1 + */ +public class PairApp { + + public static void main(String[] args) { + Pair pair1 = new Pair<>(1, "Key1"); + Pair pair2 = new Pair<>(1, "Key1"); + Pair pair3 = new Pair<>(3, "Key2"); + Pair pair4 = new Pair<>(4, "Key3"); + Pair[] pairs = new Pair[4]; + pairs[0] = pair1; + pairs[1] = pair2; + pairs[2] = pair3; + pairs[3] = pair4; + System.out.println(PairUtils.compareTo(pair1, pair2)); + System.out.println(PairUtils.compareTo(pair1, pair3)); + System.out.println(PairUtils.compareTo(pair4, pair2)); + System.out.println(PairUtils.equals(pair1, pair2)); + System.out.println(PairUtils.equals(pair1, pair3)); + System.out.println(Arrays.asList(PairUtils.getValues(pairs))); + System.out.println(Arrays.asList(PairUtils.getKeys(pairs))); + System.out.println(PairUtils.countGreaterThan(pairs, 1)); + System.out.println(PairUtils.countGreaterThan(pairs, 0)); + System.out.println(PairUtils.containsUniqueObjects(pairs)); + } +} diff --git a/src/main/java/school/lemon/changerequest/java/generics/Pairs/PairUtils.java b/src/main/java/school/lemon/changerequest/java/generics/Pairs/PairUtils.java new file mode 100644 index 0000000..417a7c7 --- /dev/null +++ b/src/main/java/school/lemon/changerequest/java/generics/Pairs/PairUtils.java @@ -0,0 +1,58 @@ +package school.lemon.changerequest.java.generics.Pairs; + +/** + * Created by lbrdev on 21.02.2017. + * Project: generics.hw1 + */ +public final class PairUtils { + + public static boolean equals(Pair pair1, Pair pair2) { + boolean flag = false; + if (pair1.getKey().equals(pair2.getKey()) && pair1.getValue().equals(pair2.getValue())) { + flag = true; + } + return flag; + } + + public static , V> int compareTo(Pair pair1, Pair pair2) { + return pair1.getKey().compareTo(pair2.getKey()); + } + + public static V[] getValues(Pair[] pairs) { + V[] valuesArray = (V[]) new Object[pairs.length]; + for (int i = 0; i < pairs.length; i++) { + valuesArray[i] = pairs[i].getValue(); + } + return valuesArray; + } + + public static K[] getKeys(Pair[] pairs) { + K[] keysArray = (K[]) new Object[pairs.length]; + for (int i = 0; i < pairs.length; i++) { + keysArray[i] = pairs[i].getKey(); + } + return keysArray; + } + + public static , V> int countGreaterThan(Pair[] pairs, K parameter) { + int counter = 0; + for (Pair pair : pairs) { + if (parameter.compareTo(pair.getKey()) == 1) { + counter++; + } + } + return counter; + } + + public static boolean containsUniqueObjects(Pair[] pairs) { + for (Pair pair : pairs) { + int i = 1; + while (i < pairs.length) { + if (pair.getKey().equals(pairs[i].getKey())) return false; + i++; + } + } + return true; + } + +} From bbd396ff2f4ad6bc652d8329476bd7d39ffe6f25 Mon Sep 17 00:00:00 2001 From: lbrdev Date: Wed, 22 Feb 2017 22:34:40 +0200 Subject: [PATCH 2/2] fixes --- .../java/generics/Container/Container.java | 10 +++++----- .../generics/Generator/DoubleGenerator.java | 10 ++++------ .../generics/Generator/IntegerGenerator.java | 5 +++++ .../generics/Generator/NumberGenerator.java | 3 +++ .../java/generics/Generator/Printer.java | 12 +++++++----- .../java/generics/Pairs/PairUtils.java | 18 ++++++------------ 6 files changed, 30 insertions(+), 28 deletions(-) diff --git a/src/main/java/school/lemon/changerequest/java/generics/Container/Container.java b/src/main/java/school/lemon/changerequest/java/generics/Container/Container.java index 01b8b51..3ff235d 100644 --- a/src/main/java/school/lemon/changerequest/java/generics/Container/Container.java +++ b/src/main/java/school/lemon/changerequest/java/generics/Container/Container.java @@ -1,7 +1,7 @@ package school.lemon.changerequest.java.generics.Container; -public class Container implements ContainerInterface { +public class Container implements ContainerInterface { private T[] array; private int size; @@ -29,11 +29,11 @@ public T get(int index) { } @Override - public boolean add(Object element, int index) { + public boolean add(T element, int index) { if (index < 0 || index > size) return false; checkSize(); System.arraycopy(array, index, array, index + 1, size - index); - array[index] = (T) element; + array[index] = element; ++size; return true; } @@ -49,9 +49,9 @@ public boolean remove(int index) { } @Override - public void add(Object element) { + public void add(T element) { checkSize(); - array[size++] = (T) element; + array[size++] = element; } diff --git a/src/main/java/school/lemon/changerequest/java/generics/Generator/DoubleGenerator.java b/src/main/java/school/lemon/changerequest/java/generics/Generator/DoubleGenerator.java index 65dbff1..d7188a3 100644 --- a/src/main/java/school/lemon/changerequest/java/generics/Generator/DoubleGenerator.java +++ b/src/main/java/school/lemon/changerequest/java/generics/Generator/DoubleGenerator.java @@ -14,11 +14,9 @@ public Double[] generateNumbers() { return arrayDouble; } - public Double calcSumForDouble(Double[] array) { - Double sum = .0; - for (int i = 0; i < array.length; i++) { - sum += array[i]; - } - return sum; + @Override + public DoubleSumCalculator getSumCalculator() { + return new DoubleSumCalculator(); } + } diff --git a/src/main/java/school/lemon/changerequest/java/generics/Generator/IntegerGenerator.java b/src/main/java/school/lemon/changerequest/java/generics/Generator/IntegerGenerator.java index 180cfd3..edeed96 100644 --- a/src/main/java/school/lemon/changerequest/java/generics/Generator/IntegerGenerator.java +++ b/src/main/java/school/lemon/changerequest/java/generics/Generator/IntegerGenerator.java @@ -12,4 +12,9 @@ public Integer[] generateNumbers() { } return arrayInt; } + + @Override + public IntegerSumCalculator getSumCalculator() { + return new IntegerSumCalculator(); + } } diff --git a/src/main/java/school/lemon/changerequest/java/generics/Generator/NumberGenerator.java b/src/main/java/school/lemon/changerequest/java/generics/Generator/NumberGenerator.java index ab04c45..7938e39 100644 --- a/src/main/java/school/lemon/changerequest/java/generics/Generator/NumberGenerator.java +++ b/src/main/java/school/lemon/changerequest/java/generics/Generator/NumberGenerator.java @@ -4,4 +4,7 @@ public abstract class NumberGenerator { static int DEFAULT_SIZE_TEN = 10; public abstract T[] generateNumbers(); + + abstract SumCalculator getSumCalculator(); + } diff --git a/src/main/java/school/lemon/changerequest/java/generics/Generator/Printer.java b/src/main/java/school/lemon/changerequest/java/generics/Generator/Printer.java index 06f2fa9..bfa5746 100644 --- a/src/main/java/school/lemon/changerequest/java/generics/Generator/Printer.java +++ b/src/main/java/school/lemon/changerequest/java/generics/Generator/Printer.java @@ -6,15 +6,17 @@ public class Printer { public Printer(NumberGenerator numberGenerator) { this.numberGenerator = numberGenerator; + if (numberGenerator instanceof IntegerGenerator) { + this.sum = (SumCalculator) new IntegerSumCalculator(); + } else { + this.sum = (SumCalculator) new DoubleSumCalculator(); + } } + public void generateAndPrint() { T[] arrayNumbers = numberGenerator.generateNumbers(); - if (numberGenerator instanceof IntegerGenerator) { - sum = (SumCalculator) new IntegerSumCalculator(); - } else { - sum = (SumCalculator) new DoubleSumCalculator(); - } + numberGenerator.getSumCalculator(); System.out.println(sum.calculateSum(arrayNumbers)); } } diff --git a/src/main/java/school/lemon/changerequest/java/generics/Pairs/PairUtils.java b/src/main/java/school/lemon/changerequest/java/generics/Pairs/PairUtils.java index 417a7c7..4e4d2cc 100644 --- a/src/main/java/school/lemon/changerequest/java/generics/Pairs/PairUtils.java +++ b/src/main/java/school/lemon/changerequest/java/generics/Pairs/PairUtils.java @@ -7,11 +7,7 @@ public final class PairUtils { public static boolean equals(Pair pair1, Pair pair2) { - boolean flag = false; - if (pair1.getKey().equals(pair2.getKey()) && pair1.getValue().equals(pair2.getValue())) { - flag = true; - } - return flag; + return pair1.getKey().equals(pair2.getKey()) && pair1.getValue().equals(pair2.getValue()); } public static , V> int compareTo(Pair pair1, Pair pair2) { @@ -45,14 +41,12 @@ public static , V> int countGreaterThan(Pair[] pai } public static boolean containsUniqueObjects(Pair[] pairs) { - for (Pair pair : pairs) { - int i = 1; - while (i < pairs.length) { - if (pair.getKey().equals(pairs[i].getKey())) return false; - i++; - } + for (int a = 0; a < pairs.length; a++ ){ + for (int i = a + 1; i < pairs.length; i++) { + if (pairs[a].getKey().equals(pairs[i].getKey())) return false; } - return true; } + return true; +} }