From fec3f27ecbfaed4159f5d253211423e59e84dcee Mon Sep 17 00:00:00 2001 From: BudBak Date: Sun, 17 Nov 2019 21:43:26 +0530 Subject: [PATCH 1/9] BAEL-3506 --- .../baeldung/maths/BasicCalculatorIfElse.java | 52 ++++++++++++++++ .../maths/BasicCalculatorSwitchCase.java | 62 +++++++++++++++++++ 2 files changed, 114 insertions(+) create mode 100644 java-numbers/src/main/java/com/baeldung/maths/BasicCalculatorIfElse.java create mode 100644 java-numbers/src/main/java/com/baeldung/maths/BasicCalculatorSwitchCase.java diff --git a/java-numbers/src/main/java/com/baeldung/maths/BasicCalculatorIfElse.java b/java-numbers/src/main/java/com/baeldung/maths/BasicCalculatorIfElse.java new file mode 100644 index 0000000000..37cac75539 --- /dev/null +++ b/java-numbers/src/main/java/com/baeldung/maths/BasicCalculatorIfElse.java @@ -0,0 +1,52 @@ +package com.baeldung.maths; + +import java.util.InputMismatchException; +import java.util.Scanner; + +public class BasicCalculatorIfElse { + + public static void main(String[] args) { + + Scanner scanner = new Scanner(System.in); + System.out.println("---------------------------------- \n" + + "Welcome to Basic Calculator \n" + + "----------------------------------"); + System.out.println("Following operations are supported : \n" + + "1. Addition (+) \n" + + "2. Subtraction (-) \n" + + "3. Multiplication (* OR x) \n" + + "4. Division (/) \n"); + try { + System.out.println("Enter an operator: (+ OR - OR * OR /) "); + char operation = scanner.next().charAt(0); + + if (!(operation == '+' || operation == '-' || operation == '*' || operation == 'x' || operation == '/')) { + System.err.println("Invalid Operator. Please use only + or - or * or /"); + } + + System.out.println("Enter First Number: "); + double num1 = scanner.nextDouble(); + + System.out.println("Enter Second Number: "); + double num2 = scanner.nextDouble(); + + if (operation == '/' && num2 == 0.0) { + System.err.println("Second Number cannot be zero for Division operation."); + } + + if (operation == '+') { + System.out.println(num1 + " + " + num2 + " = " + (num1 + num2)); + } else if (operation == '-') { + System.out.println(num1 + " - " + num2 + " = " + (num1 - num2)); + } else if (operation == '*' || operation == 'x') { + System.out.println(num1 + " x " + num2 + " = " + (num1 * num2)); + } else if (operation == '/') { + System.out.println(num1 + " / " + num2 + " = " + (num1 / num2)); + } else { + System.err.println("Invalid Operator Specified."); + } + } catch (InputMismatchException exc) { + System.err.println(exc.getMessage()); + } + } +} \ No newline at end of file diff --git a/java-numbers/src/main/java/com/baeldung/maths/BasicCalculatorSwitchCase.java b/java-numbers/src/main/java/com/baeldung/maths/BasicCalculatorSwitchCase.java new file mode 100644 index 0000000000..1f30f1b8c2 --- /dev/null +++ b/java-numbers/src/main/java/com/baeldung/maths/BasicCalculatorSwitchCase.java @@ -0,0 +1,62 @@ +package com.baeldung.maths; + +import java.util.InputMismatchException; +import java.util.Scanner; + +public class BasicCalculatorSwitchCase { + public static void main(String[] args) { + + Scanner scanner = new Scanner(System.in); + System.out.println("---------------------------------- \n" + + "Welcome to Basic Calculator \n" + + "----------------------------------"); + System.out.println("Following operations are supported : \n" + + "1. Addition (+) \n" + + "2. Subtraction (-) \n" + + "3. Multiplication (* OR x) \n" + + "4. Division (/) \n"); + try { + System.out.println("Enter an operator: (+ OR - OR * OR /) "); + char operation = scanner.next().charAt(0); + + if (!(operation == '+' || operation == '-' || operation == '*' || operation == 'x' || operation == '/')) { + System.err.println("Invalid Operator. Please use only + or - or * or /"); + } + + System.out.println("Enter First Number: "); + double num1 = scanner.nextDouble(); + + System.out.println("Enter Second Number: "); + double num2 = scanner.nextDouble(); + + if (operation == '/' && num2 == 0.0) { + System.err.println("Second Number cannot be zero for Division operation."); + } + + switch (operation) { + case '+': + System.out.println(num1 + " + " + num2 + " = " + (num1 + num2)); + break; + case '-': + System.out.println(num1 + " - " + num2 + " = " + (num1 - num2)); + break; + case '*': + System.out.println(num1 + " x " + num2 + " = " + (num1 * num2)); + break; + case 'x': + System.out.println(num1 + " x " + num2 + " = " + (num1 * num2)); + break; + case '/': + System.out.println(num1 + " / " + num2 + " = " + (num1 / num2)); + break; + default: + System.err.println("Invalid Operator Specified."); + break; + } + } catch (InputMismatchException exc) { + System.err.println(exc.getMessage()); + } + scanner.close(); + } +} + From 662f19103cd424d598c1193ae861d24c0f9dfb59 Mon Sep 17 00:00:00 2001 From: BudBak Date: Mon, 18 Nov 2019 21:13:09 +0530 Subject: [PATCH 2/9] BAEL-3506 --- java-math-2/README.md | 8 ++ java-math-2/pom.xml | 105 ++++++++++++++++++ .../basic}/BasicCalculatorIfElse.java | 9 +- .../basic}/BasicCalculatorSwitchCase.java | 8 +- java-math-2/src/main/resources/logback.xml | 13 +++ 5 files changed, 137 insertions(+), 6 deletions(-) create mode 100644 java-math-2/README.md create mode 100644 java-math-2/pom.xml rename {java-numbers/src/main/java/com/baeldung/maths => java-math-2/src/main/java/com/baeldung/maths/calculator/basic}/BasicCalculatorIfElse.java (95%) rename {java-numbers/src/main/java/com/baeldung/maths => java-math-2/src/main/java/com/baeldung/maths/calculator/basic}/BasicCalculatorSwitchCase.java (96%) create mode 100644 java-math-2/src/main/resources/logback.xml diff --git a/java-math-2/README.md b/java-math-2/README.md new file mode 100644 index 0000000000..ca809e8623 --- /dev/null +++ b/java-math-2/README.md @@ -0,0 +1,8 @@ +## Java Math + +This module contains articles about math in Java. + +### Relevant articles: + +- [Basic Calculator in Java](https://www.baeldung.com/basic-calculator-in-java) +- More articles: [[<-- prev]](/../java-math) diff --git a/java-math-2/pom.xml b/java-math-2/pom.xml new file mode 100644 index 0000000000..c9d083101b --- /dev/null +++ b/java-math-2/pom.xml @@ -0,0 +1,105 @@ + + 4.0.0 + java-math-2 + 0.0.1-SNAPSHOT + java-math-2 + + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + + + + + org.apache.commons + commons-math3 + ${commons-math3.version} + + + org.ejml + ejml-all + ${ejml.version} + + + org.nd4j + nd4j-native + ${nd4j.version} + + + org.la4j + la4j + ${la4j.version} + + + colt + colt + ${colt.version} + + + com.google.guava + guava + ${guava.version} + + + commons-codec + commons-codec + ${commons-codec.version} + + + org.projectlombok + lombok + ${lombok.version} + provided + + + org.assertj + assertj-core + ${org.assertj.core.version} + test + + + com.github.dpaukov + combinatoricslib3 + ${combinatoricslib3.version} + + + + org.openjdk.jmh + jmh-core + ${jmh.version} + + + org.openjdk.jmh + jmh-generator-annprocess + ${jmh.version} + + + + + + + + org.codehaus.mojo + exec-maven-plugin + ${exec-maven-plugin.version} + + + + + + + 3.6.1 + 3.9.0 + 1.11 + 27.0.1-jre + 3.3.0 + 0.38 + 1.0.0-beta4 + 1.2.0 + 0.6.0 + 1.19 + + + \ No newline at end of file diff --git a/java-numbers/src/main/java/com/baeldung/maths/BasicCalculatorIfElse.java b/java-math-2/src/main/java/com/baeldung/maths/calculator/basic/BasicCalculatorIfElse.java similarity index 95% rename from java-numbers/src/main/java/com/baeldung/maths/BasicCalculatorIfElse.java rename to java-math-2/src/main/java/com/baeldung/maths/calculator/basic/BasicCalculatorIfElse.java index 37cac75539..cad7bf0f13 100644 --- a/java-numbers/src/main/java/com/baeldung/maths/BasicCalculatorIfElse.java +++ b/java-math-2/src/main/java/com/baeldung/maths/calculator/basic/BasicCalculatorIfElse.java @@ -1,4 +1,4 @@ -package com.baeldung.maths; +package com.baeldung.maths.calculator.basic; import java.util.InputMismatchException; import java.util.Scanner; @@ -7,7 +7,6 @@ public class BasicCalculatorIfElse { public static void main(String[] args) { - Scanner scanner = new Scanner(System.in); System.out.println("---------------------------------- \n" + "Welcome to Basic Calculator \n" + "----------------------------------"); @@ -16,6 +15,8 @@ public class BasicCalculatorIfElse { "2. Subtraction (-) \n" + "3. Multiplication (* OR x) \n" + "4. Division (/) \n"); + + Scanner scanner = new Scanner(System.in); try { System.out.println("Enter an operator: (+ OR - OR * OR /) "); char operation = scanner.next().charAt(0); @@ -47,6 +48,8 @@ public class BasicCalculatorIfElse { } } catch (InputMismatchException exc) { System.err.println(exc.getMessage()); + } finally { + scanner.close(); } } -} \ No newline at end of file +} \ No newline at end of file diff --git a/java-numbers/src/main/java/com/baeldung/maths/BasicCalculatorSwitchCase.java b/java-math-2/src/main/java/com/baeldung/maths/calculator/basic/BasicCalculatorSwitchCase.java similarity index 96% rename from java-numbers/src/main/java/com/baeldung/maths/BasicCalculatorSwitchCase.java rename to java-math-2/src/main/java/com/baeldung/maths/calculator/basic/BasicCalculatorSwitchCase.java index 1f30f1b8c2..f87437a967 100644 --- a/java-numbers/src/main/java/com/baeldung/maths/BasicCalculatorSwitchCase.java +++ b/java-math-2/src/main/java/com/baeldung/maths/calculator/basic/BasicCalculatorSwitchCase.java @@ -1,4 +1,4 @@ -package com.baeldung.maths; +package com.baeldung.maths.calculator.basic; import java.util.InputMismatchException; import java.util.Scanner; @@ -6,7 +6,6 @@ import java.util.Scanner; public class BasicCalculatorSwitchCase { public static void main(String[] args) { - Scanner scanner = new Scanner(System.in); System.out.println("---------------------------------- \n" + "Welcome to Basic Calculator \n" + "----------------------------------"); @@ -15,6 +14,8 @@ public class BasicCalculatorSwitchCase { "2. Subtraction (-) \n" + "3. Multiplication (* OR x) \n" + "4. Division (/) \n"); + + Scanner scanner = new Scanner(System.in); try { System.out.println("Enter an operator: (+ OR - OR * OR /) "); char operation = scanner.next().charAt(0); @@ -55,8 +56,9 @@ public class BasicCalculatorSwitchCase { } } catch (InputMismatchException exc) { System.err.println(exc.getMessage()); + } finally { + scanner.close(); } - scanner.close(); } } diff --git a/java-math-2/src/main/resources/logback.xml b/java-math-2/src/main/resources/logback.xml new file mode 100644 index 0000000000..7d900d8ea8 --- /dev/null +++ b/java-math-2/src/main/resources/logback.xml @@ -0,0 +1,13 @@ + + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + \ No newline at end of file From 963ede5c57de71c4cb806706b53b7045938e8f91 Mon Sep 17 00:00:00 2001 From: BudBak Date: Mon, 18 Nov 2019 21:21:32 +0530 Subject: [PATCH 3/9] BAEL-3506 - Added java-math-2 to parent pom. --- pom.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pom.xml b/pom.xml index bc4c38f386..82a3eaf3d0 100644 --- a/pom.xml +++ b/pom.xml @@ -508,6 +508,7 @@ java-lite java-math + java-math-2 java-numbers java-numbers-2 java-rmi @@ -1286,6 +1287,7 @@ java-ee-8-security-api java-lite java-math + java-math-2 java-numbers java-numbers-2 java-rmi From 3bcb5ce809aaf1ffdace00b400a588d14edc2c50 Mon Sep 17 00:00:00 2001 From: BudBak Date: Sun, 24 Nov 2019 13:33:18 +0530 Subject: [PATCH 4/9] BAEL-3506 - Refactoring. --- .../basic/BasicCalculatorIfElse.java | 15 ++---- .../basic/BasicCalculatorSwitchCase.java | 54 +++++++++---------- 2 files changed, 29 insertions(+), 40 deletions(-) rename {java-math-2/src/main/java/com/baeldung/maths => core-java-modules/core-java-lang-math/src/main/java/com/baeldung}/calculator/basic/BasicCalculatorIfElse.java (82%) rename {java-math-2/src/main/java/com/baeldung/maths => core-java-modules/core-java-lang-math/src/main/java/com/baeldung}/calculator/basic/BasicCalculatorSwitchCase.java (50%) diff --git a/java-math-2/src/main/java/com/baeldung/maths/calculator/basic/BasicCalculatorIfElse.java b/core-java-modules/core-java-lang-math/src/main/java/com/baeldung/calculator/basic/BasicCalculatorIfElse.java similarity index 82% rename from java-math-2/src/main/java/com/baeldung/maths/calculator/basic/BasicCalculatorIfElse.java rename to core-java-modules/core-java-lang-math/src/main/java/com/baeldung/calculator/basic/BasicCalculatorIfElse.java index cad7bf0f13..87f274db51 100644 --- a/java-math-2/src/main/java/com/baeldung/maths/calculator/basic/BasicCalculatorIfElse.java +++ b/core-java-modules/core-java-lang-math/src/main/java/com/baeldung/calculator/basic/BasicCalculatorIfElse.java @@ -1,4 +1,4 @@ -package com.baeldung.maths.calculator.basic; +package com.baeldung.calculator.basic; import java.util.InputMismatchException; import java.util.Scanner; @@ -7,19 +7,14 @@ public class BasicCalculatorIfElse { public static void main(String[] args) { - System.out.println("---------------------------------- \n" + - "Welcome to Basic Calculator \n" + - "----------------------------------"); - System.out.println("Following operations are supported : \n" + - "1. Addition (+) \n" + - "2. Subtraction (-) \n" + - "3. Multiplication (* OR x) \n" + - "4. Division (/) \n"); + System.out.println("---------------------------------- \n" + "Welcome to Basic Calculator \n" + "----------------------------------"); + System.out.println("Following operations are supported : \n" + "1. Addition (+) \n" + "2. Subtraction (-) \n" + "3. Multiplication (* OR x) \n" + "4. Division (/) \n"); Scanner scanner = new Scanner(System.in); try { System.out.println("Enter an operator: (+ OR - OR * OR /) "); - char operation = scanner.next().charAt(0); + char operation = scanner.next() + .charAt(0); if (!(operation == '+' || operation == '-' || operation == '*' || operation == 'x' || operation == '/')) { System.err.println("Invalid Operator. Please use only + or - or * or /"); diff --git a/java-math-2/src/main/java/com/baeldung/maths/calculator/basic/BasicCalculatorSwitchCase.java b/core-java-modules/core-java-lang-math/src/main/java/com/baeldung/calculator/basic/BasicCalculatorSwitchCase.java similarity index 50% rename from java-math-2/src/main/java/com/baeldung/maths/calculator/basic/BasicCalculatorSwitchCase.java rename to core-java-modules/core-java-lang-math/src/main/java/com/baeldung/calculator/basic/BasicCalculatorSwitchCase.java index f87437a967..82c181a0fe 100644 --- a/java-math-2/src/main/java/com/baeldung/maths/calculator/basic/BasicCalculatorSwitchCase.java +++ b/core-java-modules/core-java-lang-math/src/main/java/com/baeldung/calculator/basic/BasicCalculatorSwitchCase.java @@ -1,4 +1,4 @@ -package com.baeldung.maths.calculator.basic; +package com.baeldung.calculator.basic; import java.util.InputMismatchException; import java.util.Scanner; @@ -6,19 +6,14 @@ import java.util.Scanner; public class BasicCalculatorSwitchCase { public static void main(String[] args) { - System.out.println("---------------------------------- \n" - + "Welcome to Basic Calculator \n" - + "----------------------------------"); - System.out.println("Following operations are supported : \n" + - "1. Addition (+) \n" + - "2. Subtraction (-) \n" + - "3. Multiplication (* OR x) \n" + - "4. Division (/) \n"); + System.out.println("---------------------------------- \n" + "Welcome to Basic Calculator \n" + "----------------------------------"); + System.out.println("Following operations are supported : \n" + "1. Addition (+) \n" + "2. Subtraction (-) \n" + "3. Multiplication (* OR x) \n" + "4. Division (/) \n"); Scanner scanner = new Scanner(System.in); try { System.out.println("Enter an operator: (+ OR - OR * OR /) "); - char operation = scanner.next().charAt(0); + char operation = scanner.next() + .charAt(0); if (!(operation == '+' || operation == '-' || operation == '*' || operation == 'x' || operation == '/')) { System.err.println("Invalid Operator. Please use only + or - or * or /"); @@ -35,24 +30,24 @@ public class BasicCalculatorSwitchCase { } switch (operation) { - case '+': - System.out.println(num1 + " + " + num2 + " = " + (num1 + num2)); - break; - case '-': - System.out.println(num1 + " - " + num2 + " = " + (num1 - num2)); - break; - case '*': - System.out.println(num1 + " x " + num2 + " = " + (num1 * num2)); - break; - case 'x': - System.out.println(num1 + " x " + num2 + " = " + (num1 * num2)); - break; - case '/': - System.out.println(num1 + " / " + num2 + " = " + (num1 / num2)); - break; - default: - System.err.println("Invalid Operator Specified."); - break; + case '+': + System.out.println(num1 + " + " + num2 + " = " + (num1 + num2)); + break; + case '-': + System.out.println(num1 + " - " + num2 + " = " + (num1 - num2)); + break; + case '*': + System.out.println(num1 + " x " + num2 + " = " + (num1 * num2)); + break; + case 'x': + System.out.println(num1 + " x " + num2 + " = " + (num1 * num2)); + break; + case '/': + System.out.println(num1 + " / " + num2 + " = " + (num1 / num2)); + break; + default: + System.err.println("Invalid Operator Specified."); + break; } } catch (InputMismatchException exc) { System.err.println(exc.getMessage()); @@ -60,5 +55,4 @@ public class BasicCalculatorSwitchCase { scanner.close(); } } -} - +} \ No newline at end of file From b333276281479fb5bc239666ff80015320ea00ac Mon Sep 17 00:00:00 2001 From: BudBak Date: Tue, 3 Dec 2019 15:29:04 +0530 Subject: [PATCH 5/9] BAEL-3481 --- .../BalancedBracketsUsingStack.java | 47 +++++++++++ .../BalancedBracketsUsingString.java | 37 +++++++++ .../BalancedBracketsUsingStackUnitTest.java | 80 +++++++++++++++++++ .../BalancedBracketsUsingStringUnitTest.java | 80 +++++++++++++++++++ 4 files changed, 244 insertions(+) create mode 100644 algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingStack.java create mode 100644 algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingString.java create mode 100644 algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingStackUnitTest.java create mode 100644 algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingStringUnitTest.java diff --git a/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingStack.java b/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingStack.java new file mode 100644 index 0000000000..d6568b4ac9 --- /dev/null +++ b/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingStack.java @@ -0,0 +1,47 @@ +package com.baeldung.algorithms.balancedbrackets; + +import java.util.Stack; + +public class BalancedBracketsUsingStack { + + public boolean isBalanced(String str) { + boolean result = true; + + if (null == str || str.length() == 0 || ((str.length() % 2) != 0)) { + result = false; + } else { + char[] ch = str.toCharArray(); + for (char c : ch) { + if (!(c == '{' || c == '[' || c == '(' || c == '}' || c == ']' || c == ')')) { + result = false; + break; + } + + } + } + + if(result) { + Stack stack = new Stack<>(); + for (char ch: str.toCharArray()) { + if (ch == '{' || ch == '[' || ch == '(') { + stack.push(ch); + } else { + if ( !stack.isEmpty() + && ((stack.peek() == '{' && ch == '}') + || (stack.peek() == '[' && ch == ']') + || (stack.peek() == '(' && ch == ')') + )) { + stack.pop(); + result = true; + } else { + result = false; + break; + } + } + + } + } + + return result; + } +} \ No newline at end of file diff --git a/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingString.java b/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingString.java new file mode 100644 index 0000000000..6ed0923d9e --- /dev/null +++ b/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingString.java @@ -0,0 +1,37 @@ +package com.baeldung.algorithms.balancedbrackets; + +public class BalancedBracketsUsingString { + + public boolean isBalanced(String str) { + boolean result = true; + + if (null == str || str.length() == 0 || ((str.length() % 2) != 0)) { + result = false; + } else { + char[] ch = str.toCharArray(); + for(char c : ch) { + if(!(c == '{' || c == '[' || c == '(' || c == '}' || c == ']' || c == ')')) { + result = false; + break; + } + + } + } + + if (result) { + while (str.indexOf("()") >= 0 || str.indexOf("[]") >= 0 || str.indexOf("{}") >= 0) { + str = str.replaceAll("\\(\\)", "") + .replaceAll("\\[\\]", "") + .replaceAll("\\{\\}", ""); + } + if (str.length() > 0) { + result = false; + } else { + result = true; + } + } + + return result; + } + +} \ No newline at end of file diff --git a/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingStackUnitTest.java b/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingStackUnitTest.java new file mode 100644 index 0000000000..11b246658c --- /dev/null +++ b/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingStackUnitTest.java @@ -0,0 +1,80 @@ +package com.baeldung.algorithms.balancedbrackets; + +import org.junit.Before; +import org.junit.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class BalancedBracketsUsingStackUnitTest { + private BalancedBracketsUsingStack balancedBracketsUsingStack; + + @Before + public void setup() { + balancedBracketsUsingStack = new BalancedBracketsUsingStack(); + } + + + @Test + public void givenNullInput_whenCheckingForBalance_shouldReturnFalse() { + boolean result = balancedBracketsUsingStack.isBalanced(null); + assertThat(result).isFalse(); + } + + @Test + public void givenEmptyString_whenCheckingForBalance_shouldReturnFalse() { + boolean result = balancedBracketsUsingStack.isBalanced(""); + assertThat(result).isFalse(); + } + + @Test + public void givenInvalidCharacterString_whenCheckingForBalance_shouldReturnFalse() { + boolean result = balancedBracketsUsingStack.isBalanced("abc[](){}"); + assertThat(result).isFalse(); + } + + @Test + public void givenOddLengthString_whenCheckingForBalance_shouldReturnFalse() { + boolean result = balancedBracketsUsingStack.isBalanced("{{[]()}}}"); + assertThat(result).isFalse(); + } + + @Test + public void givenEvenLengthString_whenCheckingForBalance_shouldReturnFalse() { + boolean result = balancedBracketsUsingStack.isBalanced("{{[]()}}}}"); + assertThat(result).isFalse(); + } + + @Test + public void givenEvenLengthUnbalancedString_whenCheckingForBalance_shouldReturnFalse() { + boolean result = balancedBracketsUsingStack.isBalanced("{[(])}"); + assertThat(result).isFalse(); + } + + + @Test + public void givenEvenLengthBalancedString_whenCheckingForBalance_shouldReturnTrue() { + boolean result = balancedBracketsUsingStack.isBalanced("{[()]}"); + assertThat(result).isTrue(); + } + + @Test + public void givenBalancedString_whenCheckingForBalance_shouldReturnTrue() { + boolean result = balancedBracketsUsingStack.isBalanced("{{[[(())]]}}"); + assertThat(result).isTrue(); + } + + + @Test + public void givenAnotherBalancedString_whenCheckingForBalance_shouldReturnTrue() { + boolean result = balancedBracketsUsingStack.isBalanced("{{([])}}"); + assertThat(result).isTrue(); + } + + + @Test + public void givenUnBalancedString_whenCheckingForBalance_shouldReturnFalse() { + boolean result = balancedBracketsUsingStack.isBalanced("{{)[](}}"); + assertThat(result).isFalse(); + } + +} \ No newline at end of file diff --git a/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingStringUnitTest.java b/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingStringUnitTest.java new file mode 100644 index 0000000000..f192417e69 --- /dev/null +++ b/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingStringUnitTest.java @@ -0,0 +1,80 @@ +package com.baeldung.algorithms.balancedbrackets; + +import org.junit.Before; +import org.junit.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class BalancedBracketsUsingStringUnitTest { + private BalancedBracketsUsingString balancedBracketsUsingString; + + @Before + public void setup() { + balancedBracketsUsingString = new BalancedBracketsUsingString(); + } + + + @Test + public void givenNullInput_whenCheckingForBalance_shouldReturnFalse() { + boolean result = balancedBracketsUsingString.isBalanced(null); + assertThat(result).isFalse(); + } + + @Test + public void givenEmptyString_whenCheckingForBalance_shouldReturnFalse() { + boolean result = balancedBracketsUsingString.isBalanced(""); + assertThat(result).isFalse(); + } + + @Test + public void givenInvalidCharacterString_whenCheckingForBalance_shouldReturnFalse() { + boolean result = balancedBracketsUsingString.isBalanced("abc[](){}"); + assertThat(result).isFalse(); + } + + @Test + public void givenOddLengthString_whenCheckingForBalance_shouldReturnFalse() { + boolean result = balancedBracketsUsingString.isBalanced("{{[]()}}}"); + assertThat(result).isFalse(); + } + + @Test + public void givenEvenLengthString_whenCheckingForBalance_shouldReturnFalse() { + boolean result = balancedBracketsUsingString.isBalanced("{{[]()}}}}"); + assertThat(result).isFalse(); + } + + @Test + public void givenEvenLengthUnbalancedString_whenCheckingForBalance_shouldReturnFalse() { + boolean result = balancedBracketsUsingString.isBalanced("{[(])}"); + assertThat(result).isFalse(); + } + + + @Test + public void givenEvenLengthBalancedString_whenCheckingForBalance_shouldReturnTrue() { + boolean result = balancedBracketsUsingString.isBalanced("{[()]}"); + assertThat(result).isTrue(); + } + + @Test + public void givenBalancedString_whenCheckingForBalance_shouldReturnTrue() { + boolean result = balancedBracketsUsingString.isBalanced("{{[[(())]]}}"); + assertThat(result).isTrue(); + } + + + @Test + public void givenAnotherBalancedString_whenCheckingForBalance_shouldReturnTrue() { + boolean result = balancedBracketsUsingString.isBalanced("{{([])}}"); + assertThat(result).isTrue(); + } + + + @Test + public void givenUnBalancedString_whenCheckingForBalance_shouldReturnFalse() { + boolean result = balancedBracketsUsingString.isBalanced("{{)[](}}"); + assertThat(result).isFalse(); + } + +} \ No newline at end of file From 767d74b38d6e635fb95a9287ee9a0c387008f96f Mon Sep 17 00:00:00 2001 From: BudBak Date: Thu, 12 Dec 2019 16:31:05 +0530 Subject: [PATCH 6/9] BAEL-3481 - updated with review comments. --- .../BalancedBracketsUsingStack.java | 38 ++++++++----------- .../BalancedBracketsUsingString.java | 24 ++++-------- 2 files changed, 22 insertions(+), 40 deletions(-) diff --git a/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingStack.java b/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingStack.java index d6568b4ac9..9e4592a512 100644 --- a/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingStack.java +++ b/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingStack.java @@ -5,43 +5,35 @@ import java.util.Stack; public class BalancedBracketsUsingStack { public boolean isBalanced(String str) { - boolean result = true; - if (null == str || str.length() == 0 || ((str.length() % 2) != 0)) { - result = false; + return false; } else { char[] ch = str.toCharArray(); for (char c : ch) { if (!(c == '{' || c == '[' || c == '(' || c == '}' || c == ']' || c == ')')) { - result = false; - break; + return false; } } } - if(result) { - Stack stack = new Stack<>(); - for (char ch: str.toCharArray()) { - if (ch == '{' || ch == '[' || ch == '(') { - stack.push(ch); + Stack stack = new Stack<>(); + for (char ch: str.toCharArray()) { + if (ch == '{' || ch == '[' || ch == '(') { + stack.push(ch); + } else { + if ( !stack.isEmpty() + && ((stack.peek() == '{' && ch == '}') + || (stack.peek() == '[' && ch == ']') + || (stack.peek() == '(' && ch == ')') + )) { + stack.pop(); } else { - if ( !stack.isEmpty() - && ((stack.peek() == '{' && ch == '}') - || (stack.peek() == '[' && ch == ']') - || (stack.peek() == '(' && ch == ')') - )) { - stack.pop(); - result = true; - } else { - result = false; - break; - } + return false; } - } } - return result; + return true; } } \ No newline at end of file diff --git a/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingString.java b/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingString.java index 6ed0923d9e..d808842dc3 100644 --- a/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingString.java +++ b/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingString.java @@ -3,35 +3,25 @@ package com.baeldung.algorithms.balancedbrackets; public class BalancedBracketsUsingString { public boolean isBalanced(String str) { - boolean result = true; - if (null == str || str.length() == 0 || ((str.length() % 2) != 0)) { - result = false; + return false; } else { char[] ch = str.toCharArray(); for(char c : ch) { if(!(c == '{' || c == '[' || c == '(' || c == '}' || c == ']' || c == ')')) { - result = false; - break; + return false; } } } - if (result) { - while (str.indexOf("()") >= 0 || str.indexOf("[]") >= 0 || str.indexOf("{}") >= 0) { - str = str.replaceAll("\\(\\)", "") - .replaceAll("\\[\\]", "") - .replaceAll("\\{\\}", ""); - } - if (str.length() > 0) { - result = false; - } else { - result = true; - } + while (str.contains("()") || str.contains("[]") || str.contains("{}")) { + str = str.replaceAll("\\(\\)", "") + .replaceAll("\\[\\]", "") + .replaceAll("\\{\\}", ""); } + return (str.length() == 0); - return result; } } \ No newline at end of file From 8676327794991ed6e36bfc4b73fa35de6a690b75 Mon Sep 17 00:00:00 2001 From: BudBak Date: Sat, 4 Jan 2020 16:28:52 +0530 Subject: [PATCH 7/9] BAEL-3481 - updated with review comments. --- ...k.java => BalancedBracketsUsingDeque.java} | 19 +++++++------- ...> BalancedBracketsUsingDequeUnitTest.java} | 26 +++++++++---------- 2 files changed, 23 insertions(+), 22 deletions(-) rename algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbrackets/{BalancedBracketsUsingStack.java => BalancedBracketsUsingDeque.java} (63%) rename algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/balancedbrackets/{BalancedBracketsUsingStackUnitTest.java => BalancedBracketsUsingDequeUnitTest.java} (70%) diff --git a/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingStack.java b/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingDeque.java similarity index 63% rename from algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingStack.java rename to algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingDeque.java index 9e4592a512..2734a622e3 100644 --- a/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingStack.java +++ b/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingDeque.java @@ -1,8 +1,9 @@ package com.baeldung.algorithms.balancedbrackets; -import java.util.Stack; +import java.util.Deque; +import java.util.LinkedList; -public class BalancedBracketsUsingStack { +public class BalancedBracketsUsingDeque { public boolean isBalanced(String str) { if (null == str || str.length() == 0 || ((str.length() % 2) != 0)) { @@ -17,17 +18,17 @@ public class BalancedBracketsUsingStack { } } - Stack stack = new Stack<>(); + Deque deque = new LinkedList<>(); for (char ch: str.toCharArray()) { if (ch == '{' || ch == '[' || ch == '(') { - stack.push(ch); + deque.addFirst(ch); } else { - if ( !stack.isEmpty() - && ((stack.peek() == '{' && ch == '}') - || (stack.peek() == '[' && ch == ']') - || (stack.peek() == '(' && ch == ')') + if ( !deque.isEmpty() + && ((deque.peekFirst() == '{' && ch == '}') + || (deque.peekFirst() == '[' && ch == ']') + || (deque.peekFirst() == '(' && ch == ')') )) { - stack.pop(); + deque.removeFirst(); } else { return false; } diff --git a/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingStackUnitTest.java b/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingDequeUnitTest.java similarity index 70% rename from algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingStackUnitTest.java rename to algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingDequeUnitTest.java index 11b246658c..1d791dd29e 100644 --- a/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingStackUnitTest.java +++ b/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingDequeUnitTest.java @@ -5,75 +5,75 @@ import org.junit.Test; import static org.assertj.core.api.Assertions.assertThat; -public class BalancedBracketsUsingStackUnitTest { - private BalancedBracketsUsingStack balancedBracketsUsingStack; +public class BalancedBracketsUsingDequeUnitTest { + private BalancedBracketsUsingDeque balancedBracketsUsingDeque; @Before public void setup() { - balancedBracketsUsingStack = new BalancedBracketsUsingStack(); + balancedBracketsUsingDeque = new BalancedBracketsUsingDeque(); } @Test public void givenNullInput_whenCheckingForBalance_shouldReturnFalse() { - boolean result = balancedBracketsUsingStack.isBalanced(null); + boolean result = balancedBracketsUsingDeque.isBalanced(null); assertThat(result).isFalse(); } @Test public void givenEmptyString_whenCheckingForBalance_shouldReturnFalse() { - boolean result = balancedBracketsUsingStack.isBalanced(""); + boolean result = balancedBracketsUsingDeque.isBalanced(""); assertThat(result).isFalse(); } @Test public void givenInvalidCharacterString_whenCheckingForBalance_shouldReturnFalse() { - boolean result = balancedBracketsUsingStack.isBalanced("abc[](){}"); + boolean result = balancedBracketsUsingDeque.isBalanced("abc[](){}"); assertThat(result).isFalse(); } @Test public void givenOddLengthString_whenCheckingForBalance_shouldReturnFalse() { - boolean result = balancedBracketsUsingStack.isBalanced("{{[]()}}}"); + boolean result = balancedBracketsUsingDeque.isBalanced("{{[]()}}}"); assertThat(result).isFalse(); } @Test public void givenEvenLengthString_whenCheckingForBalance_shouldReturnFalse() { - boolean result = balancedBracketsUsingStack.isBalanced("{{[]()}}}}"); + boolean result = balancedBracketsUsingDeque.isBalanced("{{[]()}}}}"); assertThat(result).isFalse(); } @Test public void givenEvenLengthUnbalancedString_whenCheckingForBalance_shouldReturnFalse() { - boolean result = balancedBracketsUsingStack.isBalanced("{[(])}"); + boolean result = balancedBracketsUsingDeque.isBalanced("{[(])}"); assertThat(result).isFalse(); } @Test public void givenEvenLengthBalancedString_whenCheckingForBalance_shouldReturnTrue() { - boolean result = balancedBracketsUsingStack.isBalanced("{[()]}"); + boolean result = balancedBracketsUsingDeque.isBalanced("{[()]}"); assertThat(result).isTrue(); } @Test public void givenBalancedString_whenCheckingForBalance_shouldReturnTrue() { - boolean result = balancedBracketsUsingStack.isBalanced("{{[[(())]]}}"); + boolean result = balancedBracketsUsingDeque.isBalanced("{{[[(())]]}}"); assertThat(result).isTrue(); } @Test public void givenAnotherBalancedString_whenCheckingForBalance_shouldReturnTrue() { - boolean result = balancedBracketsUsingStack.isBalanced("{{([])}}"); + boolean result = balancedBracketsUsingDeque.isBalanced("{{([])}}"); assertThat(result).isTrue(); } @Test public void givenUnBalancedString_whenCheckingForBalance_shouldReturnFalse() { - boolean result = balancedBracketsUsingStack.isBalanced("{{)[](}}"); + boolean result = balancedBracketsUsingDeque.isBalanced("{{)[](}}"); assertThat(result).isFalse(); } From e59d0e481d07a004d19985315e4774bf226961ca Mon Sep 17 00:00:00 2001 From: BudBak Date: Fri, 10 Jan 2020 15:10:43 +0530 Subject: [PATCH 8/9] BAEL-3481 - modified as per Editor Review comments. --- .../balancedbrackets/BalancedBracketsUsingDeque.java | 2 +- .../balancedbrackets/BalancedBracketsUsingString.java | 2 +- .../balancedbrackets/BalancedBracketsUsingDequeUnitTest.java | 4 ++-- .../balancedbrackets/BalancedBracketsUsingStringUnitTest.java | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingDeque.java b/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingDeque.java index 2734a622e3..cc3e246962 100644 --- a/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingDeque.java +++ b/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingDeque.java @@ -6,7 +6,7 @@ import java.util.LinkedList; public class BalancedBracketsUsingDeque { public boolean isBalanced(String str) { - if (null == str || str.length() == 0 || ((str.length() % 2) != 0)) { + if (null == str || ((str.length() % 2) != 0)) { return false; } else { char[] ch = str.toCharArray(); diff --git a/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingString.java b/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingString.java index d808842dc3..60d7191597 100644 --- a/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingString.java +++ b/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingString.java @@ -3,7 +3,7 @@ package com.baeldung.algorithms.balancedbrackets; public class BalancedBracketsUsingString { public boolean isBalanced(String str) { - if (null == str || str.length() == 0 || ((str.length() % 2) != 0)) { + if (null == str || ((str.length() % 2) != 0)) { return false; } else { char[] ch = str.toCharArray(); diff --git a/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingDequeUnitTest.java b/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingDequeUnitTest.java index 1d791dd29e..d7bed3000b 100644 --- a/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingDequeUnitTest.java +++ b/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingDequeUnitTest.java @@ -21,9 +21,9 @@ public class BalancedBracketsUsingDequeUnitTest { } @Test - public void givenEmptyString_whenCheckingForBalance_shouldReturnFalse() { + public void givenEmptyString_whenCheckingForBalance_shouldReturnTrue() { boolean result = balancedBracketsUsingDeque.isBalanced(""); - assertThat(result).isFalse(); + assertThat(result).isTrue(); } @Test diff --git a/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingStringUnitTest.java b/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingStringUnitTest.java index f192417e69..8f4d72d0e7 100644 --- a/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingStringUnitTest.java +++ b/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingStringUnitTest.java @@ -21,9 +21,9 @@ public class BalancedBracketsUsingStringUnitTest { } @Test - public void givenEmptyString_whenCheckingForBalance_shouldReturnFalse() { + public void givenEmptyString_whenCheckingForBalance_shouldReturnTrue() { boolean result = balancedBracketsUsingString.isBalanced(""); - assertThat(result).isFalse(); + assertThat(result).isTrue(); } @Test From 6a1f8e76c5238e3b211427578b951de5963460f1 Mon Sep 17 00:00:00 2001 From: BudBak Date: Mon, 20 Jan 2020 13:53:26 +0530 Subject: [PATCH 9/9] BAEL-3481 - Fixed Formatting. --- .../BalancedBracketsUsingDeque.java | 54 ++++---- .../BalancedBracketsUsingString.java | 38 +++--- .../BalancedBracketsUsingDequeUnitTest.java | 116 +++++++++--------- .../BalancedBracketsUsingStringUnitTest.java | 114 +++++++++-------- 4 files changed, 155 insertions(+), 167 deletions(-) diff --git a/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingDeque.java b/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingDeque.java index cc3e246962..4c220b4047 100644 --- a/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingDeque.java +++ b/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingDeque.java @@ -5,36 +5,32 @@ import java.util.LinkedList; public class BalancedBracketsUsingDeque { - public boolean isBalanced(String str) { - if (null == str || ((str.length() % 2) != 0)) { - return false; - } else { - char[] ch = str.toCharArray(); - for (char c : ch) { - if (!(c == '{' || c == '[' || c == '(' || c == '}' || c == ']' || c == ')')) { - return false; - } - - } + public boolean isBalanced(String str) { + if (null == str || ((str.length() % 2) != 0)) { + return false; + } else { + char[] ch = str.toCharArray(); + for (char c : ch) { + if (!(c == '{' || c == '[' || c == '(' || c == '}' || c == ']' || c == ')')) { + return false; } - Deque deque = new LinkedList<>(); - for (char ch: str.toCharArray()) { - if (ch == '{' || ch == '[' || ch == '(') { - deque.addFirst(ch); - } else { - if ( !deque.isEmpty() - && ((deque.peekFirst() == '{' && ch == '}') - || (deque.peekFirst() == '[' && ch == ']') - || (deque.peekFirst() == '(' && ch == ')') - )) { - deque.removeFirst(); - } else { - return false; - } - } - } - - return true; + } } + + Deque deque = new LinkedList<>(); + for (char ch : str.toCharArray()) { + if (ch == '{' || ch == '[' || ch == '(') { + deque.addFirst(ch); + } else { + if (!deque.isEmpty() && ((deque.peekFirst() == '{' && ch == '}') || (deque.peekFirst() == '[' && ch == ']') || (deque.peekFirst() == '(' && ch == ')'))) { + deque.removeFirst(); + } else { + return false; + } + } + } + + return true; + } } \ No newline at end of file diff --git a/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingString.java b/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingString.java index 60d7191597..0418efbe79 100644 --- a/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingString.java +++ b/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingString.java @@ -2,26 +2,26 @@ package com.baeldung.algorithms.balancedbrackets; public class BalancedBracketsUsingString { - public boolean isBalanced(String str) { - if (null == str || ((str.length() % 2) != 0)) { - return false; - } else { - char[] ch = str.toCharArray(); - for(char c : ch) { - if(!(c == '{' || c == '[' || c == '(' || c == '}' || c == ']' || c == ')')) { - return false; - } - - } + public boolean isBalanced(String str) { + if (null == str || ((str.length() % 2) != 0)) { + return false; + } else { + char[] ch = str.toCharArray(); + for (char c : ch) { + if (!(c == '{' || c == '[' || c == '(' || c == '}' || c == ']' || c == ')')) { + return false; } - while (str.contains("()") || str.contains("[]") || str.contains("{}")) { - str = str.replaceAll("\\(\\)", "") - .replaceAll("\\[\\]", "") - .replaceAll("\\{\\}", ""); - } - return (str.length() == 0); - + } } -} \ No newline at end of file + while (str.contains("()") || str.contains("[]") || str.contains("{}")) { + str = str.replaceAll("\\(\\)", "") + .replaceAll("\\[\\]", "") + .replaceAll("\\{\\}", ""); + } + return (str.length() == 0); + + } + +} \ No newline at end of file diff --git a/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingDequeUnitTest.java b/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingDequeUnitTest.java index d7bed3000b..964c1ce11a 100644 --- a/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingDequeUnitTest.java +++ b/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingDequeUnitTest.java @@ -6,75 +6,71 @@ import org.junit.Test; import static org.assertj.core.api.Assertions.assertThat; public class BalancedBracketsUsingDequeUnitTest { - private BalancedBracketsUsingDeque balancedBracketsUsingDeque; + private BalancedBracketsUsingDeque balancedBracketsUsingDeque; - @Before - public void setup() { - balancedBracketsUsingDeque = new BalancedBracketsUsingDeque(); - } + @Before + public void setup() { + balancedBracketsUsingDeque = new BalancedBracketsUsingDeque(); + } + @Test + public void givenNullInput_whenCheckingForBalance_shouldReturnFalse() { + boolean result = balancedBracketsUsingDeque.isBalanced(null); + assertThat(result).isFalse(); + } - @Test - public void givenNullInput_whenCheckingForBalance_shouldReturnFalse() { - boolean result = balancedBracketsUsingDeque.isBalanced(null); - assertThat(result).isFalse(); - } + @Test + public void givenEmptyString_whenCheckingForBalance_shouldReturnTrue() { + boolean result = balancedBracketsUsingDeque.isBalanced(""); + assertThat(result).isTrue(); + } - @Test - public void givenEmptyString_whenCheckingForBalance_shouldReturnTrue() { - boolean result = balancedBracketsUsingDeque.isBalanced(""); - assertThat(result).isTrue(); - } + @Test + public void givenInvalidCharacterString_whenCheckingForBalance_shouldReturnFalse() { + boolean result = balancedBracketsUsingDeque.isBalanced("abc[](){}"); + assertThat(result).isFalse(); + } - @Test - public void givenInvalidCharacterString_whenCheckingForBalance_shouldReturnFalse() { - boolean result = balancedBracketsUsingDeque.isBalanced("abc[](){}"); - assertThat(result).isFalse(); - } + @Test + public void givenOddLengthString_whenCheckingForBalance_shouldReturnFalse() { + boolean result = balancedBracketsUsingDeque.isBalanced("{{[]()}}}"); + assertThat(result).isFalse(); + } - @Test - public void givenOddLengthString_whenCheckingForBalance_shouldReturnFalse() { - boolean result = balancedBracketsUsingDeque.isBalanced("{{[]()}}}"); - assertThat(result).isFalse(); - } + @Test + public void givenEvenLengthString_whenCheckingForBalance_shouldReturnFalse() { + boolean result = balancedBracketsUsingDeque.isBalanced("{{[]()}}}}"); + assertThat(result).isFalse(); + } - @Test - public void givenEvenLengthString_whenCheckingForBalance_shouldReturnFalse() { - boolean result = balancedBracketsUsingDeque.isBalanced("{{[]()}}}}"); - assertThat(result).isFalse(); - } + @Test + public void givenEvenLengthUnbalancedString_whenCheckingForBalance_shouldReturnFalse() { + boolean result = balancedBracketsUsingDeque.isBalanced("{[(])}"); + assertThat(result).isFalse(); + } - @Test - public void givenEvenLengthUnbalancedString_whenCheckingForBalance_shouldReturnFalse() { - boolean result = balancedBracketsUsingDeque.isBalanced("{[(])}"); - assertThat(result).isFalse(); - } + @Test + public void givenEvenLengthBalancedString_whenCheckingForBalance_shouldReturnTrue() { + boolean result = balancedBracketsUsingDeque.isBalanced("{[()]}"); + assertThat(result).isTrue(); + } + @Test + public void givenBalancedString_whenCheckingForBalance_shouldReturnTrue() { + boolean result = balancedBracketsUsingDeque.isBalanced("{{[[(())]]}}"); + assertThat(result).isTrue(); + } - @Test - public void givenEvenLengthBalancedString_whenCheckingForBalance_shouldReturnTrue() { - boolean result = balancedBracketsUsingDeque.isBalanced("{[()]}"); - assertThat(result).isTrue(); - } + @Test + public void givenAnotherBalancedString_whenCheckingForBalance_shouldReturnTrue() { + boolean result = balancedBracketsUsingDeque.isBalanced("{{([])}}"); + assertThat(result).isTrue(); + } - @Test - public void givenBalancedString_whenCheckingForBalance_shouldReturnTrue() { - boolean result = balancedBracketsUsingDeque.isBalanced("{{[[(())]]}}"); - assertThat(result).isTrue(); - } + @Test + public void givenUnBalancedString_whenCheckingForBalance_shouldReturnFalse() { + boolean result = balancedBracketsUsingDeque.isBalanced("{{)[](}}"); + assertThat(result).isFalse(); + } - - @Test - public void givenAnotherBalancedString_whenCheckingForBalance_shouldReturnTrue() { - boolean result = balancedBracketsUsingDeque.isBalanced("{{([])}}"); - assertThat(result).isTrue(); - } - - - @Test - public void givenUnBalancedString_whenCheckingForBalance_shouldReturnFalse() { - boolean result = balancedBracketsUsingDeque.isBalanced("{{)[](}}"); - assertThat(result).isFalse(); - } - -} \ No newline at end of file +} \ No newline at end of file diff --git a/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingStringUnitTest.java b/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingStringUnitTest.java index 8f4d72d0e7..69ce42b0f1 100644 --- a/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingStringUnitTest.java +++ b/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/balancedbrackets/BalancedBracketsUsingStringUnitTest.java @@ -6,75 +6,71 @@ import org.junit.Test; import static org.assertj.core.api.Assertions.assertThat; public class BalancedBracketsUsingStringUnitTest { - private BalancedBracketsUsingString balancedBracketsUsingString; + private BalancedBracketsUsingString balancedBracketsUsingString; - @Before - public void setup() { - balancedBracketsUsingString = new BalancedBracketsUsingString(); - } + @Before + public void setup() { + balancedBracketsUsingString = new BalancedBracketsUsingString(); + } + @Test + public void givenNullInput_whenCheckingForBalance_shouldReturnFalse() { + boolean result = balancedBracketsUsingString.isBalanced(null); + assertThat(result).isFalse(); + } - @Test - public void givenNullInput_whenCheckingForBalance_shouldReturnFalse() { - boolean result = balancedBracketsUsingString.isBalanced(null); - assertThat(result).isFalse(); - } + @Test + public void givenEmptyString_whenCheckingForBalance_shouldReturnTrue() { + boolean result = balancedBracketsUsingString.isBalanced(""); + assertThat(result).isTrue(); + } - @Test - public void givenEmptyString_whenCheckingForBalance_shouldReturnTrue() { - boolean result = balancedBracketsUsingString.isBalanced(""); - assertThat(result).isTrue(); - } + @Test + public void givenInvalidCharacterString_whenCheckingForBalance_shouldReturnFalse() { + boolean result = balancedBracketsUsingString.isBalanced("abc[](){}"); + assertThat(result).isFalse(); + } - @Test - public void givenInvalidCharacterString_whenCheckingForBalance_shouldReturnFalse() { - boolean result = balancedBracketsUsingString.isBalanced("abc[](){}"); - assertThat(result).isFalse(); - } + @Test + public void givenOddLengthString_whenCheckingForBalance_shouldReturnFalse() { + boolean result = balancedBracketsUsingString.isBalanced("{{[]()}}}"); + assertThat(result).isFalse(); + } - @Test - public void givenOddLengthString_whenCheckingForBalance_shouldReturnFalse() { - boolean result = balancedBracketsUsingString.isBalanced("{{[]()}}}"); - assertThat(result).isFalse(); - } + @Test + public void givenEvenLengthString_whenCheckingForBalance_shouldReturnFalse() { + boolean result = balancedBracketsUsingString.isBalanced("{{[]()}}}}"); + assertThat(result).isFalse(); + } - @Test - public void givenEvenLengthString_whenCheckingForBalance_shouldReturnFalse() { - boolean result = balancedBracketsUsingString.isBalanced("{{[]()}}}}"); - assertThat(result).isFalse(); - } + @Test + public void givenEvenLengthUnbalancedString_whenCheckingForBalance_shouldReturnFalse() { + boolean result = balancedBracketsUsingString.isBalanced("{[(])}"); + assertThat(result).isFalse(); + } - @Test - public void givenEvenLengthUnbalancedString_whenCheckingForBalance_shouldReturnFalse() { - boolean result = balancedBracketsUsingString.isBalanced("{[(])}"); - assertThat(result).isFalse(); - } + @Test + public void givenEvenLengthBalancedString_whenCheckingForBalance_shouldReturnTrue() { + boolean result = balancedBracketsUsingString.isBalanced("{[()]}"); + assertThat(result).isTrue(); + } + @Test + public void givenBalancedString_whenCheckingForBalance_shouldReturnTrue() { + boolean result = balancedBracketsUsingString.isBalanced("{{[[(())]]}}"); + assertThat(result).isTrue(); + } - @Test - public void givenEvenLengthBalancedString_whenCheckingForBalance_shouldReturnTrue() { - boolean result = balancedBracketsUsingString.isBalanced("{[()]}"); - assertThat(result).isTrue(); - } + @Test + public void givenAnotherBalancedString_whenCheckingForBalance_shouldReturnTrue() { + boolean result = balancedBracketsUsingString.isBalanced("{{([])}}"); + assertThat(result).isTrue(); + } - @Test - public void givenBalancedString_whenCheckingForBalance_shouldReturnTrue() { - boolean result = balancedBracketsUsingString.isBalanced("{{[[(())]]}}"); - assertThat(result).isTrue(); - } - - - @Test - public void givenAnotherBalancedString_whenCheckingForBalance_shouldReturnTrue() { - boolean result = balancedBracketsUsingString.isBalanced("{{([])}}"); - assertThat(result).isTrue(); - } - - - @Test - public void givenUnBalancedString_whenCheckingForBalance_shouldReturnFalse() { - boolean result = balancedBracketsUsingString.isBalanced("{{)[](}}"); - assertThat(result).isFalse(); - } + @Test + public void givenUnBalancedString_whenCheckingForBalance_shouldReturnFalse() { + boolean result = balancedBracketsUsingString.isBalanced("{{)[](}}"); + assertThat(result).isFalse(); + } } \ No newline at end of file