104k views
3 votes
java Problem: The TARDIS has been infected by a virus which means it is up to Doctor Who to manually enter calculations into the TARDIS interface. The calculations necessary to make the TARDIS work properly involve real, imaginary and complex numbers. The Doctor has asked you to create a program that will evaluate numerical expressions so that he can quickly enter the information into the TARDIS. Details:

User Cruftex
by
4.6k points

2 Answers

4 votes

Answer:

tell him to do it himself and call him lazy

(i know im a genius)

User Easeccy
by
5.0k points
6 votes

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.

User Eric Winter
by
4.5k points