Answer:
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.HashMap;
import java.util.Scanner;
import java.util.concurrent.SynchronousQueue;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public lass Test
{
public static void main(String[] args) {
FileReader fr;
try {
fr = new FileReader("expression.txt");
Scanner sc=new Scanner(fr);
while(sc.hasNextLine())
{
String line=sc.nextLine();
pareseString(line);
pareseString(line);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
pareseString("6 * 3+2i");
pareseString("2 - 3");
}
public static ComplexNumber add(ComplexNumber c1, ComplexNumber c2) {
return new ComplexNumber(c1.getRealNumber() + c2.getRealNumber(), c1.getImaginaryNumber() + c2.getImaginaryNumber());
}
public static ComplexNumber substract(ComplexNumber c1, ComplexNumber c2) {
return new ComplexNumber(c1.getRealNumber() - c2.getRealNumber(), c1.getImaginaryNumber() - c2.getImaginaryNumber());
}
public static ComplexNumber multiply(ComplexNumber c1,ComplexNumber c2) {
ComplexNumber c3 = new ComplexNumber();
c3.setRealNumber( c1.getRealNumber() * c2.getRealNumber() - c1.getImaginaryNumber() * c2.getImaginaryNumber());
c3.setImaginaryNumber( c1.getRealNumber() * c2.getImaginaryNumber() - c1.getImaginaryNumber() * c2.getRealNumber());;
return c3;
}
public static ComplexNumber divide(ComplexNumber c1,ComplexNumber c2) {
ComplexNumber c3 = new ComplexNumber();
c3.setRealNumber( c1.getRealNumber() / c2.getRealNumber() - c1.getImaginaryNumber() / c2.getImaginaryNumber());
c3.setImaginaryNumber( c1.getRealNumber() / c2.getImaginaryNumber() - c1.getImaginaryNumber() / c2.getRealNumber());;
return c3;
}
public static void pareseString(String line)
{
String [] strArr=line.split(" ");
String cn1=strArr[0];
String operation=strArr[1];
String cn2=strArr[2];
ComplexNumber c1=validation(cn1);
ComplexNumber c2=validation(cn2);
if(c1!=null && c2!=null)
{
switch (operation) {
case "+":
System.out.println(add(c1, c2));
break;
case "-":
System.out.println(substract(c1, c2));
break;
case "*":
System.out.println(multiply(c1, c2));
break;
case "/":
System.out.println(divide(c1, c2));
break;
}
}
}
private static ComplexNumber validation(String comp) {
String numberNoWhiteSpace = comp.replaceAll("\\s","");
Pattern patternA = Pattern.compile("([-]?[0-9]+\\.?[0-9]?)([-|+]+[0-9]+\\.?[0-9]?)[i$]+");
Pattern patternB = Pattern.compile("([-]?[0-9]+\\.?[0-9]?)$");
Pattern patternC = Pattern.compile("([-]?[0-9]+\\.?[0-9]?)[i$]");
Matcher matcherA = patternA.matcher(numberNoWhiteSpace);
Matcher matcherB = patternB.matcher(numberNoWhiteSpace);
Matcher matcherC = patternC.matcher(numberNoWhiteSpace);
double realNumber=0.0;
double imaginaryNumber=0.0;
ComplexNumber cn=null;
if (matcherA.find()) {
realNumber = Double.parseDouble(matcherA.group(1));
imaginaryNumber = Double.parseDouble(matcherA.group(2));
cn=new ComplexNumber(realNumber, imaginaryNumber);
} else if (matcherB.find()) {
realNumber = Double.parseDouble(matcherB.group(1));
imaginaryNumber = 0;
cn=new ComplexNumber(realNumber, imaginaryNumber);
} else if (matcherC.find()) {
realNumber = 0;
imaginaryNumber = Double.parseDouble(matcherC.group(1));
cn=new ComplexNumber(realNumber, imaginaryNumber);
}
return cn;
}
}
class Number
{
private double realNumber;
public Number(double realNumber) {
this.realNumber= realNumber;
}
public Number() {
this.realNumber= realNumber;
}
public double getRealNumber() {
return realNumber;
}
public void setRealNumber(double realNumnber) {
this.realNumber = realNumnber;
}
@Override
public String toString() {
return this.getRealNumber()+"";
}
@Override
public boolean equals(Object obj) {
if(obj instanceof Number)
{
Number cn=(Number)obj;
return this.getRealNumber()==cn.getRealNumber();
}
return false;
}
}
class ComplexNumber extends Number
{
public double getImaginaryNumber() {
return imaginaryNumber;
}
public void setImaginaryNumber(double imaginaryNumber) {
this.imaginaryNumber = imaginaryNumber;
}
double imaginaryNumber;
public ComplexNumber(double realNumnber,double imaginaryNumber) {
super(realNumnber);
this.imaginaryNumber=imaginaryNumber;
}
public ComplexNumber() {
super();
}
@Override
public String toString() {
return this.getRealNumber()+"+"+this.getImaginaryNumber()+"i";
}
@Override
public boolean equals(Object obj) {
if(obj instanceof ComplexNumber)
{
ComplexNumber cn=(ComplexNumber)obj;
return this.getRealNumber()==cn.getRealNumber() && cn.getImaginaryNumber()==this.getImaginaryNumber();
}
return false;
}
}
Step-by-step explanation:
Create the add method, that takes object c2 as parameter.
Create the subtract method, followed by the methods to multiply and divide.
Create a regular expression that matches complex number with BOTH real AND imaginary parts.