diff --git a/core-java-modules/core-java-numbers-7/src/main/java/com/baeldung/complexnumbers/ComplexNumber.java b/core-java-modules/core-java-numbers-7/src/main/java/com/baeldung/complexnumbers/ComplexNumber.java index e2791a0a60..3283b081fe 100644 --- a/core-java-modules/core-java-numbers-7/src/main/java/com/baeldung/complexnumbers/ComplexNumber.java +++ b/core-java-modules/core-java-numbers-7/src/main/java/com/baeldung/complexnumbers/ComplexNumber.java @@ -3,16 +3,9 @@ package com.baeldung.complexnumbers; import java.util.regex.Matcher; import java.util.regex.Pattern; -public class ComplexNumber { - public double real; - public double imaginary; +public record ComplexNumber(double real, double imaginary) { - public ComplexNumber(double a, double b) { - this.real = a; - this.imaginary = b; - } - - public ComplexNumber(String complexNumberStr) { + public static ComplexNumber fromString(String complexNumberStr) { Pattern pattern = Pattern.compile("(-?\\d*\\.?\\d+)?(?:([+-]?\\d*\\.?\\d+)i)?"); Matcher matcher = pattern.matcher(complexNumberStr.replaceAll("\\s", "")); @@ -23,29 +16,22 @@ public class ComplexNumber { String imaginaryPartStr = matcher.group(2); // Parse real part (if present) - real = (realPartStr != null) ? Double.parseDouble(realPartStr) : 0; + double real = (realPartStr != null) ? Double.parseDouble(realPartStr) : 0; // Parse imaginary part (if present) - imaginary = (imaginaryPartStr != null) ? Double.parseDouble(imaginaryPartStr) : 0; + double imaginary = (imaginaryPartStr != null) ? Double.parseDouble(imaginaryPartStr) : 0; + return new ComplexNumber(real, imaginary); } else { throw new IllegalArgumentException("Invalid complex number format(" + complexNumberStr + "), supported format is `a+bi`"); } } - public double getReal() { - return real; - } - - public double getImaginary() { - return imaginary; - } - public String toString() { return real + "+" + imaginary + "i"; } public ComplexNumber add(ComplexNumber that) { - return new ComplexNumber(real + that.getReal(), imaginary + that.getImaginary()); + return new ComplexNumber(real + that.real, imaginary + that.imaginary); } public ComplexNumber multiply(ComplexNumber that) { @@ -55,7 +41,7 @@ public class ComplexNumber { } public ComplexNumber subtract(ComplexNumber that) { - return new ComplexNumber(real - that.getReal(), imaginary - that.getImaginary()); + return new ComplexNumber(real - that.real, imaginary - that.imaginary); } public ComplexNumber divide(ComplexNumber that) { diff --git a/core-java-modules/core-java-numbers-7/src/test/java/com/baeldung/complexnumbers/ComplexNumberOperationsUnitTest.java b/core-java-modules/core-java-numbers-7/src/test/java/com/baeldung/complexnumbers/ComplexNumberOperationsUnitTest.java index c7f726c80b..b3c95b7346 100644 --- a/core-java-modules/core-java-numbers-7/src/test/java/com/baeldung/complexnumbers/ComplexNumberOperationsUnitTest.java +++ b/core-java-modules/core-java-numbers-7/src/test/java/com/baeldung/complexnumbers/ComplexNumberOperationsUnitTest.java @@ -19,9 +19,9 @@ public class ComplexNumberOperationsUnitTest { "2+4i, 0, 0" }) public void multiply_two_complex_numbers(String complexStr1, String complexStr2, String expectedStr) { - ComplexNumber complex1 = new ComplexNumber(complexStr1); - ComplexNumber complex2 = new ComplexNumber(complexStr2); - ComplexNumber expected = new ComplexNumber(expectedStr); + ComplexNumber complex1 = ComplexNumber.fromString(complexStr1); + ComplexNumber complex2 = ComplexNumber.fromString(complexStr2); + ComplexNumber expected = ComplexNumber.fromString(expectedStr); ComplexNumber product = complex1.multiply(complex2); Assertions.assertTrue(isSame(product, expected)); } @@ -39,9 +39,9 @@ public class ComplexNumberOperationsUnitTest { "2+4i, 0, 2+4i" }) public void add_two_complex_numbers(String complexStr1, String complexStr2, String expectedStr) { - ComplexNumber complex1 = new ComplexNumber(complexStr1); - ComplexNumber complex2 = new ComplexNumber(complexStr2); - ComplexNumber expected = new ComplexNumber(expectedStr); + ComplexNumber complex1 = ComplexNumber.fromString(complexStr1); + ComplexNumber complex2 = ComplexNumber.fromString(complexStr2); + ComplexNumber expected = ComplexNumber.fromString(expectedStr); ComplexNumber sum = complex1.add(complex2); Assertions.assertTrue(isSame(sum, expected)); } @@ -59,9 +59,9 @@ public class ComplexNumberOperationsUnitTest { "2+4i, 0, 2+4i" }) public void subtract_two_complex_numbers(String complexStr1, String complexStr2, String expectedStr) { - ComplexNumber complex1 = new ComplexNumber(complexStr1); - ComplexNumber complex2 = new ComplexNumber(complexStr2); - ComplexNumber expected = new ComplexNumber(expectedStr); + ComplexNumber complex1 = ComplexNumber.fromString(complexStr1); + ComplexNumber complex2 = ComplexNumber.fromString(complexStr2); + ComplexNumber expected = ComplexNumber.fromString(expectedStr); ComplexNumber sum = complex1.subtract(complex2); Assertions.assertTrue(isSame(sum, expected)); } @@ -79,14 +79,14 @@ public class ComplexNumberOperationsUnitTest { "2+4i, 1, 2+4i" }) public void divide_two_complex_numbers(String complexStr1, String complexStr2, String expectedStr) { - ComplexNumber complex1 = new ComplexNumber(complexStr1); - ComplexNumber complex2 = new ComplexNumber(complexStr2); - ComplexNumber expected = new ComplexNumber(expectedStr); + ComplexNumber complex1 = ComplexNumber.fromString(complexStr1); + ComplexNumber complex2 = ComplexNumber.fromString(complexStr2); + ComplexNumber expected = ComplexNumber.fromString(expectedStr); ComplexNumber sum = complex1.divide(complex2); Assertions.assertTrue(isSame(sum, expected)); } public boolean isSame(ComplexNumber result, ComplexNumber expected) { - return result.real == expected.real && result.imaginary == expected.imaginary; + return result.real() == expected.real() && result.imaginary() == expected.imaginary(); } }