Added sample code for complex number addition and multiplication
This commit is contained in:
parent
592655fef8
commit
c944722402
|
@ -0,0 +1,90 @@
|
||||||
|
package com.baeldung.complexnumbers;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Assertions;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.params.ParameterizedTest;
|
||||||
|
import org.junit.jupiter.params.provider.CsvSource;
|
||||||
|
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
class ComplexNumber {
|
||||||
|
public long real;
|
||||||
|
public long imaginary;
|
||||||
|
|
||||||
|
public ComplexNumber(long a, long b) {
|
||||||
|
this.real = a;
|
||||||
|
this.imaginary = b;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ComplexNumber(String complexNumberStr) {
|
||||||
|
Pattern pattern = Pattern.compile("(-?\\d+)\\s*[+]\\s*(-?\\d+)\\s*i|(-?\\d+)\\s*i\\s*[+]\\s*(-?\\d+)");
|
||||||
|
Matcher matcher = pattern.matcher(complexNumberStr);
|
||||||
|
if (matcher.find()) {
|
||||||
|
// Extract real and imaginary parts
|
||||||
|
long realPart;
|
||||||
|
long imaginaryPart;
|
||||||
|
if (matcher.group(1) != null && matcher.group(2) != null) {
|
||||||
|
realPart = Long.parseLong(matcher.group(1)); // Group 1 is the real part
|
||||||
|
imaginaryPart = Long.parseLong(matcher.group(2)); // Group 2 is the imaginary part
|
||||||
|
} else {
|
||||||
|
realPart = Long.parseLong(matcher.group(4)); // Group 4 is the real part
|
||||||
|
imaginaryPart = Long.parseLong(matcher.group(3)); // Group 3 is the imaginary part
|
||||||
|
}
|
||||||
|
this.real = realPart;
|
||||||
|
this.imaginary = imaginaryPart;
|
||||||
|
} else {
|
||||||
|
throw new IllegalArgumentException("String does not match the complex number pattern of `a+bi` or `bi+a`.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getReal() {
|
||||||
|
return real;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getImaginary() {
|
||||||
|
return imaginary;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
return real + "+" + imaginary + "i";
|
||||||
|
}
|
||||||
|
|
||||||
|
public ComplexNumber add(ComplexNumber that) {
|
||||||
|
return new ComplexNumber(real + that.getReal(), imaginary + that.getImaginary());
|
||||||
|
}
|
||||||
|
|
||||||
|
public ComplexNumber multiply(ComplexNumber that) {
|
||||||
|
long newReal = this.real * that.real - this.imaginary * that.imaginary;
|
||||||
|
long newImaginary = this.real * that.imaginary + this.imaginary * that.real;
|
||||||
|
return new ComplexNumber(newReal, newImaginary);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isSame(ComplexNumber that) {
|
||||||
|
return this.real == that.real && this.imaginary == that.imaginary;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ComplexNumberAddMultiplyUnitTest {
|
||||||
|
|
||||||
|
@ParameterizedTest(name = "Multiplying {0} and {1}")
|
||||||
|
@CsvSource({
|
||||||
|
"3+2i, 1+7i, -11+23i",
|
||||||
|
"1+1i, 1+1i, 0+2i",
|
||||||
|
"2i+3, 1+7i, 23i+-11",
|
||||||
|
"2i +3, 1 + 7i, 23i+ -11",
|
||||||
|
"0+5i, 3+0i, 0+15i",
|
||||||
|
"0+0i, -2+0i, 0+0i",
|
||||||
|
"-3+2i, 1-7i, -23-23i"
|
||||||
|
})
|
||||||
|
public void sum_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 multiplied = complex1.multiply(complex2);
|
||||||
|
System.out.println(multiplied.toString());
|
||||||
|
Assertions.assertTrue(multiplied.isSame(expected));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue