From 20a9d22dbc49319dee68d42f9a8c09d67aca10bc Mon Sep 17 00:00:00 2001 From: Peter McCormick Date: Sun, 11 Feb 2018 18:38:00 -0500 Subject: [PATCH] Utilized class extract feature to clean up code. All test cases passed. --- .../looplabs/IntegerDuplicateDeleter.java | 75 +++++++++++++++ .../looplabs/StringDuplicateDeleter.java | 62 ++++++++++++- .../com/zipcodewilmington/looplabs/Utils.java | 93 +++++++++++++++++++ 3 files changed, 229 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/zipcodewilmington/looplabs/Utils.java diff --git a/src/main/java/com/zipcodewilmington/looplabs/IntegerDuplicateDeleter.java b/src/main/java/com/zipcodewilmington/looplabs/IntegerDuplicateDeleter.java index ee550c5..7bd7ee3 100644 --- a/src/main/java/com/zipcodewilmington/looplabs/IntegerDuplicateDeleter.java +++ b/src/main/java/com/zipcodewilmington/looplabs/IntegerDuplicateDeleter.java @@ -1,8 +1,83 @@ package com.zipcodewilmington.looplabs; +import java.util.Arrays; + /** * Created by leon on 1/29/18. * @ATTENTION_TO_STUDENTS You are forbidden from modifying the signature of this class. */ public final class IntegerDuplicateDeleter extends DuplicateDeleter { + public IntegerDuplicateDeleter(Integer[] intArray) { + super(intArray); + } + + @Override + public Integer[] removeDuplicates(int maxNumberOfDuplications) { + boolean checking = true; + int currentNumber; + int count = 0; + int currentIndex = 0; + StringBuilder dupString = new StringBuilder(); + + Arrays.sort(array); + if (maxNumberOfDuplications < 2) { + return new Integer[0]; + } else { + while (checking) { + currentNumber = array[currentIndex]; + count = Utils.countMatches(currentIndex, count, array, currentNumber); + Utils.appender(maxNumberOfDuplications, dupString, currentNumber, count); + + if (Utils.isComplete(currentIndex, count, array)) { + checking = false; + } else { + currentIndex += count; + count = 0; + } + } + String[] dupArray= dupString.toString().split(","); + Integer[] dupNumArray = new Integer[dupArray.length]; + int i = 0; + + for (String str: dupArray) { + dupNumArray[i] = Integer.parseInt(str); + i++; + } + return dupNumArray; + } + } + + @Override + public Integer[] removeDuplicatesExactly(int exactNumberOfDuplications) { + boolean checking = true; + int currentNumber; + int count = 0; + int currentIndex = 0; + StringBuilder dupString = new StringBuilder(); + + Arrays.sort(array); + while(checking) { + currentNumber = array[currentIndex]; + count = Utils.countMatches(currentIndex, count, array, currentNumber); + Utils.appendExact(exactNumberOfDuplications, dupString, currentNumber, count); + + if (Utils.isComplete(currentIndex, count, array)) { + checking = false; + } else { + currentIndex += count; + count = 0; + } + } + String[] dupArray= dupString.toString().split(","); + Integer[] dupNumArray = new Integer[dupArray.length]; + int i = 0; + + for (String str: dupArray) { + dupNumArray[i] = Integer.parseInt(str); + i++; + } + return dupNumArray; + + } + } diff --git a/src/main/java/com/zipcodewilmington/looplabs/StringDuplicateDeleter.java b/src/main/java/com/zipcodewilmington/looplabs/StringDuplicateDeleter.java index 4818fe3..6130acb 100644 --- a/src/main/java/com/zipcodewilmington/looplabs/StringDuplicateDeleter.java +++ b/src/main/java/com/zipcodewilmington/looplabs/StringDuplicateDeleter.java @@ -1,8 +1,68 @@ package com.zipcodewilmington.looplabs; +import java.util.Arrays; + /** * Created by leon on 1/28/18. * @ATTENTION_TO_STUDENTS You are forbidden from modifying the signature of this class. */ public final class StringDuplicateDeleter extends DuplicateDeleter { -} + + + public StringDuplicateDeleter(String[] intArray) { + super(intArray); + } + + public String[] removeDuplicates(int maxNumberOfDuplications) { + boolean checking = true; + String currentString = ""; + int count = 0; + int currentIndex = 0; + StringBuilder dupString = new StringBuilder(); + + Arrays.sort(array); + if (maxNumberOfDuplications < 2) { + return new String[0]; + } else { + while (checking) { + currentString = array[currentIndex]; + count = Utils.countMatches(currentIndex, count, array, currentString); + Utils.appender(maxNumberOfDuplications, dupString, currentString, count); + + if (Utils.isComplete(currentIndex, count, array)) { + checking = false; + } else { + currentIndex += count; + count = 0; + } + } + String[] dupArray = dupString.toString().split(","); + return dupArray; + } + } + + + public String[] removeDuplicatesExactly(int exactNumberOfDuplications) { + boolean checking = true; + String currentString = ""; + int count = 0; + int currentIndex = 0; + StringBuilder dupString = new StringBuilder(); + + Arrays.sort(array); + while(checking) { + currentString = array[currentIndex]; + count = Utils.countMatches(currentIndex, count, array, currentString); + Utils.appendExact(exactNumberOfDuplications, dupString, currentString, count); + + if (Utils.isComplete(currentIndex, count, array)) { + checking = false; + } else { + currentIndex += count; + count = 0; + } + } + String[] dupArray = dupString.toString().split(","); + return dupArray; + } +} \ No newline at end of file diff --git a/src/main/java/com/zipcodewilmington/looplabs/Utils.java b/src/main/java/com/zipcodewilmington/looplabs/Utils.java new file mode 100644 index 0000000..6a9aab8 --- /dev/null +++ b/src/main/java/com/zipcodewilmington/looplabs/Utils.java @@ -0,0 +1,93 @@ +package com.zipcodewilmington.looplabs; + +public class Utils { + + public static void appender(int maxNumberOfDuplications, StringBuilder dupString, String currentString, int count) { + if (count < maxNumberOfDuplications) { + for (int i = 0; i < count; i++) { + dupString.append(currentString + ","); + } + } + } + + public static void appender(int maxNumberOfDuplications, StringBuilder dupString, int currentNumber, int count) { + if (count < maxNumberOfDuplications) { + for (int i = 0; i < count; i++) { + dupString.append(currentNumber + ","); + } + } + } + + public static boolean isMatch(String currentString, String currentIndex) { + if (currentString.equals(currentIndex)) { + return true; + } else { + return false; + } + } + + public static boolean isMatch(int currentNumber, int currentIndex) { + if (currentNumber == (currentIndex)) { + return true; + } else { + return false; + } + } + + public static boolean isComplete(int currentIndex, int count, String[] array) { + if (currentIndex + count == array.length) { + return true; + + } else { + return false; + } + } + + public static boolean isComplete(int currentIndex, int count, Integer[] array) { + if (currentIndex + count == array.length) { + return true; + + } else { + return false; + } + } + + public static void appendExact(int exactNumberOfDuplications, StringBuilder dupString, String currentString, int count) { + if (count != exactNumberOfDuplications) { + for (int i = 0; i < count; i++) { + dupString.append(currentString + ","); + } + } + } + + public static void appendExact(int exactNumberOfDuplications, StringBuilder dupString, int currentString, int count) { + if (count != exactNumberOfDuplications) { + for (int i = 0; i < count; i++) { + dupString.append(currentString + ","); + } + } + } + + public static int countMatches(int currentIndex, int count, String[] array, String currentString) { + + for(int i = currentIndex; i