Used records intead of plain class
This commit is contained in:
parent
9ddceb29f1
commit
423e60577d
@ -3,16 +3,9 @@ package com.baeldung.complexnumbers;
|
|||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
public class ComplexNumber {
|
public record ComplexNumber(double real, double imaginary) {
|
||||||
public double real;
|
|
||||||
public double imaginary;
|
|
||||||
|
|
||||||
public ComplexNumber(double a, double b) {
|
public static ComplexNumber fromString(String complexNumberStr) {
|
||||||
this.real = a;
|
|
||||||
this.imaginary = b;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ComplexNumber(String complexNumberStr) {
|
|
||||||
|
|
||||||
Pattern pattern = Pattern.compile("(-?\\d*\\.?\\d+)?(?:([+-]?\\d*\\.?\\d+)i)?");
|
Pattern pattern = Pattern.compile("(-?\\d*\\.?\\d+)?(?:([+-]?\\d*\\.?\\d+)i)?");
|
||||||
Matcher matcher = pattern.matcher(complexNumberStr.replaceAll("\\s", ""));
|
Matcher matcher = pattern.matcher(complexNumberStr.replaceAll("\\s", ""));
|
||||||
@ -23,29 +16,22 @@ public class ComplexNumber {
|
|||||||
String imaginaryPartStr = matcher.group(2);
|
String imaginaryPartStr = matcher.group(2);
|
||||||
|
|
||||||
// Parse real part (if present)
|
// 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)
|
// 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 {
|
} else {
|
||||||
throw new IllegalArgumentException("Invalid complex number format(" + complexNumberStr + "), supported format is `a+bi`");
|
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() {
|
public String toString() {
|
||||||
return real + "+" + imaginary + "i";
|
return real + "+" + imaginary + "i";
|
||||||
}
|
}
|
||||||
|
|
||||||
public ComplexNumber add(ComplexNumber that) {
|
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) {
|
public ComplexNumber multiply(ComplexNumber that) {
|
||||||
@ -55,7 +41,7 @@ public class ComplexNumber {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public ComplexNumber subtract(ComplexNumber that) {
|
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) {
|
public ComplexNumber divide(ComplexNumber that) {
|
||||||
|
@ -19,9 +19,9 @@ public class ComplexNumberOperationsUnitTest {
|
|||||||
"2+4i, 0, 0"
|
"2+4i, 0, 0"
|
||||||
})
|
})
|
||||||
public void multiply_two_complex_numbers(String complexStr1, String complexStr2, String expectedStr) {
|
public void multiply_two_complex_numbers(String complexStr1, String complexStr2, String expectedStr) {
|
||||||
ComplexNumber complex1 = new ComplexNumber(complexStr1);
|
ComplexNumber complex1 = ComplexNumber.fromString(complexStr1);
|
||||||
ComplexNumber complex2 = new ComplexNumber(complexStr2);
|
ComplexNumber complex2 = ComplexNumber.fromString(complexStr2);
|
||||||
ComplexNumber expected = new ComplexNumber(expectedStr);
|
ComplexNumber expected = ComplexNumber.fromString(expectedStr);
|
||||||
ComplexNumber product = complex1.multiply(complex2);
|
ComplexNumber product = complex1.multiply(complex2);
|
||||||
Assertions.assertTrue(isSame(product, expected));
|
Assertions.assertTrue(isSame(product, expected));
|
||||||
}
|
}
|
||||||
@ -39,9 +39,9 @@ public class ComplexNumberOperationsUnitTest {
|
|||||||
"2+4i, 0, 2+4i"
|
"2+4i, 0, 2+4i"
|
||||||
})
|
})
|
||||||
public void add_two_complex_numbers(String complexStr1, String complexStr2, String expectedStr) {
|
public void add_two_complex_numbers(String complexStr1, String complexStr2, String expectedStr) {
|
||||||
ComplexNumber complex1 = new ComplexNumber(complexStr1);
|
ComplexNumber complex1 = ComplexNumber.fromString(complexStr1);
|
||||||
ComplexNumber complex2 = new ComplexNumber(complexStr2);
|
ComplexNumber complex2 = ComplexNumber.fromString(complexStr2);
|
||||||
ComplexNumber expected = new ComplexNumber(expectedStr);
|
ComplexNumber expected = ComplexNumber.fromString(expectedStr);
|
||||||
ComplexNumber sum = complex1.add(complex2);
|
ComplexNumber sum = complex1.add(complex2);
|
||||||
Assertions.assertTrue(isSame(sum, expected));
|
Assertions.assertTrue(isSame(sum, expected));
|
||||||
}
|
}
|
||||||
@ -59,9 +59,9 @@ public class ComplexNumberOperationsUnitTest {
|
|||||||
"2+4i, 0, 2+4i"
|
"2+4i, 0, 2+4i"
|
||||||
})
|
})
|
||||||
public void subtract_two_complex_numbers(String complexStr1, String complexStr2, String expectedStr) {
|
public void subtract_two_complex_numbers(String complexStr1, String complexStr2, String expectedStr) {
|
||||||
ComplexNumber complex1 = new ComplexNumber(complexStr1);
|
ComplexNumber complex1 = ComplexNumber.fromString(complexStr1);
|
||||||
ComplexNumber complex2 = new ComplexNumber(complexStr2);
|
ComplexNumber complex2 = ComplexNumber.fromString(complexStr2);
|
||||||
ComplexNumber expected = new ComplexNumber(expectedStr);
|
ComplexNumber expected = ComplexNumber.fromString(expectedStr);
|
||||||
ComplexNumber sum = complex1.subtract(complex2);
|
ComplexNumber sum = complex1.subtract(complex2);
|
||||||
Assertions.assertTrue(isSame(sum, expected));
|
Assertions.assertTrue(isSame(sum, expected));
|
||||||
}
|
}
|
||||||
@ -79,14 +79,14 @@ public class ComplexNumberOperationsUnitTest {
|
|||||||
"2+4i, 1, 2+4i"
|
"2+4i, 1, 2+4i"
|
||||||
})
|
})
|
||||||
public void divide_two_complex_numbers(String complexStr1, String complexStr2, String expectedStr) {
|
public void divide_two_complex_numbers(String complexStr1, String complexStr2, String expectedStr) {
|
||||||
ComplexNumber complex1 = new ComplexNumber(complexStr1);
|
ComplexNumber complex1 = ComplexNumber.fromString(complexStr1);
|
||||||
ComplexNumber complex2 = new ComplexNumber(complexStr2);
|
ComplexNumber complex2 = ComplexNumber.fromString(complexStr2);
|
||||||
ComplexNumber expected = new ComplexNumber(expectedStr);
|
ComplexNumber expected = ComplexNumber.fromString(expectedStr);
|
||||||
ComplexNumber sum = complex1.divide(complex2);
|
ComplexNumber sum = complex1.divide(complex2);
|
||||||
Assertions.assertTrue(isSame(sum, expected));
|
Assertions.assertTrue(isSame(sum, expected));
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isSame(ComplexNumber result, ComplexNumber 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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user