diff --git a/a1/src/edu/wmich/cs3310/a1/Controller.java b/a1/src/edu/wmich/cs3310/a1/Controller.java deleted file mode 100644 index 778a40134d173ecee81fb0380271679713615b6b..0000000000000000000000000000000000000000 --- a/a1/src/edu/wmich/cs3310/a1/Controller.java +++ /dev/null @@ -1,30 +0,0 @@ -package edu.wmich.cs3310.a1; - - -public class Controller { - - //region Variables - - - - //endregion Variables - - - - //region Controllers - - public Controller() { - - } - - //endregion Controllers - - - - //region Methods - - - - //endregion Methods - -} diff --git a/a1/src/edu/wmich/cs3310/a1/Main.java b/a1/src/edu/wmich/cs3310/a1/Main.java index f55608c39f830289276310e84353b6c8eb5c1c38..9968636255c56d8c0657c3b881324f0ec4194c23 100644 --- a/a1/src/edu/wmich/cs3310/a1/Main.java +++ b/a1/src/edu/wmich/cs3310/a1/Main.java @@ -1,9 +1,11 @@ package edu.wmich.cs3310.a1; +import java.io.IOException; + public class Main { - public static void main(String[] args) { + public static void main(String[] args) throws IOException { // Create class to run program from non-static source. - Controller controller = new Controller(); + StackQueueDemo controller = new StackQueueDemo(); } } diff --git a/a1/src/edu/wmich/cs3310/a1/QueueCheckBalancedParentheses.java b/a1/src/edu/wmich/cs3310/a1/QueueCheckBalancedParentheses.java new file mode 100644 index 0000000000000000000000000000000000000000..594d8365c4447c60ed6f19f2656f9170680abd00 --- /dev/null +++ b/a1/src/edu/wmich/cs3310/a1/QueueCheckBalancedParentheses.java @@ -0,0 +1,88 @@ +package edu.wmich.cs3310.a1; + +import edu.wmich.cs3310.a1.DataStructures.CharNode; +import edu.wmich.cs3310.a1.DataStructures.CharQueue; + + +public class QueueCheckBalancedParentheses extends CharQueue{ + + //region Variables + + private String text; + CharNode tempNode; + + //endregion Variables + + + + //region Constructors + + /** + * Base constructor. + */ + public QueueCheckBalancedParentheses() { + + } + + //endregion Constructors + + + + //region Properties + + /** + * Setter for text variable. + * @param value String value to set. + */ + private void setText(String value) { + text = value; + } + + //endregion Properties + + + + //region Methods + + /** + * Checks for parenthesis balance. + * Returns int based on number of unpaired parens. + * @param value String to parse for parens. + * @return Number of unpaired parens. + */ + public int CheckBalancedParenthesis(String value) { + setText(value); + int stringLength = text.length(); + int index = 0; + int leftCounter = 0; + int rightCounter = 0; + + while (index < stringLength) { + this.Enqueue(text.charAt(index)); + index++; + } + + while ((tempNode = this.Dequeue()) != null) { + + // Check for left paren. + if (tempNode.myData() == '(') { + leftCounter++; + } + + // Check for right paren. + if (tempNode.myData() == ')') { + if (leftCounter < 1) { + // No match. Increasing counter. + rightCounter++; + } else { + // Paren has match. Decreasing counter. + leftCounter--; + } + } + } + return (rightCounter + leftCounter); + } + + //endregion Methods + +} diff --git a/a1/src/edu/wmich/cs3310/a1/StackCheckBalancedParentheses.java b/a1/src/edu/wmich/cs3310/a1/StackCheckBalancedParentheses.java new file mode 100644 index 0000000000000000000000000000000000000000..de5a7734af9ce7d7ed502414fd5934481071b567 --- /dev/null +++ b/a1/src/edu/wmich/cs3310/a1/StackCheckBalancedParentheses.java @@ -0,0 +1,87 @@ +package edu.wmich.cs3310.a1; + +import edu.wmich.cs3310.a1.DataStructures.CharNode; +import edu.wmich.cs3310.a1.DataStructures.CharStack; + + +public class StackCheckBalancedParentheses extends CharStack { + + //region Variables + + private String text; + CharNode tempNode; + + //endregion Variables + + + + //region Constructors + + /** + * Base constructor. + */ + public StackCheckBalancedParentheses() { + + } + + //endregion Constructors + + + + //region Properties + + /** + * Setter for text variable. + * @param value String value to set. + */ + private void setText(String value) { + text = value; + } + + //endregion Properties + + + + //region Methods + + /** + * Checks for parenthesis balance. + * Returns int based on number of unpaired parens. + * @param value String to parse for parens. + * @return Number of unpaired parens. + */ + public int CheckBalancedParenthesis(String value) { + setText(value); + int stringLength = text.length(); + int index = 0; + int leftCounter = 0; + int rightCounter = 0; + + while (index < stringLength) { + this.Push(text.charAt(index)); + index++; + } + + while ((tempNode = this.Pop()) != null) { + + // Check for right paren. + if (tempNode.myData() == ')') { + rightCounter++; + } + + // Check for left paren. + if (tempNode.myData() == '(') { + if (rightCounter < 1) { + // No match. Increasing counter. + leftCounter++; + } else { + // Paren has match. Decreasing counter. + rightCounter--; + } + } + } + return (rightCounter + leftCounter); + } + + //endregion Methods +} diff --git a/a1/src/edu/wmich/cs3310/a1/StackQueueDemo.java b/a1/src/edu/wmich/cs3310/a1/StackQueueDemo.java new file mode 100644 index 0000000000000000000000000000000000000000..baf0d36a64878d2325eade59e84aa167cae217a7 --- /dev/null +++ b/a1/src/edu/wmich/cs3310/a1/StackQueueDemo.java @@ -0,0 +1,149 @@ +package edu.wmich.cs3310.a1; + +import java.io.IOException; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Scanner; + + +public class StackQueueDemo { + + //region Variables + + private int stackBalance; + private int queueBalance; + private boolean runBool; + private String userInputString; + private StackCheckBalancedParentheses stackCheck; + private QueueCheckBalancedParentheses queueCheck; + private Scanner reader = new Scanner(System.in); // For user input. + private Scanner scanner; // For file reading. + + + //endregion Variables + + + + //region Controllers + + /** + * Base controller. + */ + public StackQueueDemo() throws IOException{ + runBool = true; + stackCheck = new StackCheckBalancedParentheses(); + queueCheck = new QueueCheckBalancedParentheses(); + + while (runBool) { + PrintHelp(); + userInputString = GetUserInput(); + switch (userInputString) { + case "1": + userInputString = GetUserInput("Enter Path:"); + ReadFile(userInputString); + break; + case "2": + userInputString = GetUserInput(); + ProcessString(userInputString, false); + break; + case "3": + runBool = false; + break; + default: + break; + } + } + + } + + //endregion Controllers + + + + //region Methods + + /** + * Prints help to user interface. + */ + private void PrintHelp() { + System.out.println(); + System.out.println("Type '1' to select a file to read."); + System.out.println("Type '2' to enter a string to read."); + System.out.println("Type '3' to exit program"); + System.out.println(); + } + + + /** + * Acquire user input. + * @return String of user's input. + */ + private String GetUserInput() { + String tempString; + + System.out.print("$ "); + tempString = reader.next().trim(); + System.out.println(); + + return tempString; + } + + + /** + * Prompt for and acquire user input. + * @param promptString String to show user. + * @return String of user's input. + */ + private String GetUserInput(String promptString) { + String tempString; + + System.out.print(promptString); + tempString = reader.next().trim(); + System.out.println(); + + return tempString; + } + + + /** + * Reads file in line by line. Any blank lines are ignored. + * @param fileString String to file location. + */ + private void ReadFile(String fileString) { + String tempString; + try { + Path filePath = Paths.get(fileString); + + scanner = new Scanner(filePath); + while (scanner.hasNextLine()) { + tempString = scanner.nextLine(); + if (!(tempString.trim().equals(""))) { + ProcessString(tempString, true); + } + } + } catch (Exception e) { + System.out.println("No such path exists."); + } + } + + + /** + * Processes string by parsing it through both queue and stack paren classes. + * @param lineString String to parse for parenthesis. + * @param printBool Inicates if string should be printed for user display. + */ + private void ProcessString(String lineString, boolean printBool) { + if (printBool) { + System.out.println(lineString); + } + stackBalance = stackCheck.CheckBalancedParenthesis(lineString); + queueBalance = queueCheck.CheckBalancedParenthesis(lineString); + System.out.println("Stack balance: " + stackBalance); + System.out.println("Queue balance: " + queueBalance); + System.out.println(); + } + + + //endregion Methods + +} diff --git a/a1/tests/QueueParenTests.java b/a1/tests/QueueParenTests.java new file mode 100644 index 0000000000000000000000000000000000000000..0e06e779abe75cf23e8e8343e1b4ecf25f989c77 --- /dev/null +++ b/a1/tests/QueueParenTests.java @@ -0,0 +1,93 @@ + +import org.junit.Before; +import org.junit.Assert; +import org.junit.Test; + +import edu.wmich.cs3310.a1.QueueCheckBalancedParentheses; + + +/** + * Tests for QueueCheckBalancedParentheses Class. + */ +public class QueueParenTests { + + //region Variables + + QueueCheckBalancedParentheses aQueue; + + //endregion Variables + + + + //region Tests + + @Before + public void setUp() { + aQueue = new QueueCheckBalancedParentheses(); + } + + + @Test + public void Test_Paren_Equal() { + Assert.assertEquals(0, aQueue.CheckBalancedParenthesis("")); + Assert.assertEquals(0, aQueue.CheckBalancedParenthesis("()")); + Assert.assertEquals(0, aQueue.CheckBalancedParenthesis("(())")); + Assert.assertEquals(0, aQueue.CheckBalancedParenthesis("()()")); + Assert.assertEquals(0, aQueue.CheckBalancedParenthesis("((()))")); + } + + + @Test + public void Test_Paren_Unbalanced_by_One() { + Assert.assertEquals(1, aQueue.CheckBalancedParenthesis("(")); + Assert.assertEquals(1, aQueue.CheckBalancedParenthesis(")")); + Assert.assertEquals(1, aQueue.CheckBalancedParenthesis("()(")); + Assert.assertEquals(1, aQueue.CheckBalancedParenthesis("())")); + Assert.assertEquals(1, aQueue.CheckBalancedParenthesis("(()")); + Assert.assertEquals(1, aQueue.CheckBalancedParenthesis(")()")); + Assert.assertEquals(1, aQueue.CheckBalancedParenthesis("()()(")); + Assert.assertEquals(1, aQueue.CheckBalancedParenthesis("()())")); + } + + + @Test + public void Test_Paren_Unbalanced_by_Two() { + Assert.assertEquals(2, aQueue.CheckBalancedParenthesis("((")); + Assert.assertEquals(2, aQueue.CheckBalancedParenthesis("))")); + Assert.assertEquals(2, aQueue.CheckBalancedParenthesis(")(")); + Assert.assertEquals(2, aQueue.CheckBalancedParenthesis("()((")); + Assert.assertEquals(2, aQueue.CheckBalancedParenthesis("()))")); + Assert.assertEquals(2, aQueue.CheckBalancedParenthesis("((()")); + Assert.assertEquals(2, aQueue.CheckBalancedParenthesis("))()")); + Assert.assertEquals(2, aQueue.CheckBalancedParenthesis(")()(")); + } + + + @Test + public void Test_Paren_Unbalanced_by_Three() { + Assert.assertEquals(3, aQueue.CheckBalancedParenthesis("(((")); + Assert.assertEquals(3, aQueue.CheckBalancedParenthesis(")))")); + Assert.assertEquals(3, aQueue.CheckBalancedParenthesis("()(((")); + Assert.assertEquals(3, aQueue.CheckBalancedParenthesis("())))")); + Assert.assertEquals(3, aQueue.CheckBalancedParenthesis("(((()")); + Assert.assertEquals(3, aQueue.CheckBalancedParenthesis(")))()")); + Assert.assertEquals(3, aQueue.CheckBalancedParenthesis(")()((")); + Assert.assertEquals(3, aQueue.CheckBalancedParenthesis(")()))")); + } + + + @Test + public void Test_Paren_Unbalanced_by_Four() { + Assert.assertEquals(4, aQueue.CheckBalancedParenthesis("((((")); + Assert.assertEquals(4, aQueue.CheckBalancedParenthesis("))))")); + Assert.assertEquals(4, aQueue.CheckBalancedParenthesis("()((((")); + Assert.assertEquals(4, aQueue.CheckBalancedParenthesis("()))))")); + Assert.assertEquals(4, aQueue.CheckBalancedParenthesis("((((()")); + Assert.assertEquals(4, aQueue.CheckBalancedParenthesis("))))()")); + Assert.assertEquals(4, aQueue.CheckBalancedParenthesis("))()((")); + Assert.assertEquals(4, aQueue.CheckBalancedParenthesis("((()((")); + Assert.assertEquals(4, aQueue.CheckBalancedParenthesis("))()))")); + } + + //endregion Tests +} diff --git a/a1/tests/StackParenTests.java b/a1/tests/StackParenTests.java new file mode 100644 index 0000000000000000000000000000000000000000..e75c13f8321b7490fb3206a7aee5850199f28bcd --- /dev/null +++ b/a1/tests/StackParenTests.java @@ -0,0 +1,93 @@ + +import org.junit.Before; +import org.junit.Assert; +import org.junit.Test; + +import edu.wmich.cs3310.a1.StackCheckBalancedParentheses; + + +/** + * Tests for StackCheckBalancedParentheses Class. + */ +public class StackParenTests { + + //region Variables + + StackCheckBalancedParentheses aStack; + + //endregion Variables + + + + //region Tests + + @Before + public void setUp() { + aStack = new StackCheckBalancedParentheses(); + } + + + @Test + public void Test_Paren_Equal() { + Assert.assertEquals(0, aStack.CheckBalancedParenthesis("")); + Assert.assertEquals(0, aStack.CheckBalancedParenthesis("()")); + Assert.assertEquals(0, aStack.CheckBalancedParenthesis("(())")); + Assert.assertEquals(0, aStack.CheckBalancedParenthesis("()()")); + Assert.assertEquals(0, aStack.CheckBalancedParenthesis("((()))")); + } + + + @Test + public void Test_Paren_Unbalanced_by_One() { + Assert.assertEquals(1, aStack.CheckBalancedParenthesis("(")); + Assert.assertEquals(1, aStack.CheckBalancedParenthesis(")")); + Assert.assertEquals(1, aStack.CheckBalancedParenthesis("()(")); + Assert.assertEquals(1, aStack.CheckBalancedParenthesis("())")); + Assert.assertEquals(1, aStack.CheckBalancedParenthesis("(()")); + Assert.assertEquals(1, aStack.CheckBalancedParenthesis(")()")); + Assert.assertEquals(1, aStack.CheckBalancedParenthesis("()()(")); + Assert.assertEquals(1, aStack.CheckBalancedParenthesis("()())")); + } + + + @Test + public void Test_Paren_Unbalanced_by_Two() { + Assert.assertEquals(2, aStack.CheckBalancedParenthesis("((")); + Assert.assertEquals(2, aStack.CheckBalancedParenthesis("))")); + Assert.assertEquals(2, aStack.CheckBalancedParenthesis(")(")); + Assert.assertEquals(2, aStack.CheckBalancedParenthesis("()((")); + Assert.assertEquals(2, aStack.CheckBalancedParenthesis("()))")); + Assert.assertEquals(2, aStack.CheckBalancedParenthesis("((()")); + Assert.assertEquals(2, aStack.CheckBalancedParenthesis("))()")); + Assert.assertEquals(2, aStack.CheckBalancedParenthesis(")()(")); + } + + + @Test + public void Test_Paren_Unbalanced_by_Three() { + Assert.assertEquals(3, aStack.CheckBalancedParenthesis("(((")); + Assert.assertEquals(3, aStack.CheckBalancedParenthesis(")))")); + Assert.assertEquals(3, aStack.CheckBalancedParenthesis("()(((")); + Assert.assertEquals(3, aStack.CheckBalancedParenthesis("())))")); + Assert.assertEquals(3, aStack.CheckBalancedParenthesis("(((()")); + Assert.assertEquals(3, aStack.CheckBalancedParenthesis(")))()")); + Assert.assertEquals(3, aStack.CheckBalancedParenthesis(")()((")); + Assert.assertEquals(3, aStack.CheckBalancedParenthesis(")()))")); + } + + + @Test + public void Test_Paren_Unbalanced_by_Four() { + Assert.assertEquals(4, aStack.CheckBalancedParenthesis("((((")); + Assert.assertEquals(4, aStack.CheckBalancedParenthesis("))))")); + Assert.assertEquals(4, aStack.CheckBalancedParenthesis("()((((")); + Assert.assertEquals(4, aStack.CheckBalancedParenthesis("()))))")); + Assert.assertEquals(4, aStack.CheckBalancedParenthesis("((((()")); + Assert.assertEquals(4, aStack.CheckBalancedParenthesis("))))()")); + Assert.assertEquals(4, aStack.CheckBalancedParenthesis("))()((")); + Assert.assertEquals(4, aStack.CheckBalancedParenthesis("((()((")); + Assert.assertEquals(4, aStack.CheckBalancedParenthesis("))()))")); + } + + //endregion Tests +}