Java 使用HashSet的复数

Java 使用HashSet的复数,java,hashset,complex-numbers,Java,Hashset,Complex Numbers,这所大学的任务是:实现对象的加、减、乘、除方法。从复坐标创建一个尺寸为n的集合(Hashset)。将其转移到一个完成/乘以其元素的方法。 我了解操作方法本身,但我无法理解为什么需要hashset以及如何在代码中实现它。我读了这些文章,但是我仍然不明白如何应用这个类来实现 对不起,我的英语不好 import java.lang.Math; public class Complex { double dReal, dImaginary; // Constructor method

这所大学的任务是:实现对象的加、减、乘、除方法。从复坐标创建一个尺寸为n的集合(Hashset)。将其转移到一个完成/乘以其元素的方法。 我了解操作方法本身,但我无法理解为什么需要hashset以及如何在代码中实现它。我读了这些文章,但是我仍然不明白如何应用这个类来实现

对不起,我的英语不好

import java.lang.Math;

public class Complex {
    double dReal, dImaginary;

    // Constructor methods 

    public Complex() {}

    public Complex( double dReal, double dImaginary ) {
        this.dReal      = dReal;
        this.dImaginary = dImaginary; 
    }

    // Convert complex number to a string 

    public String toString() {
        if (dImaginary >= 0)
            return dReal + "+" +  dImaginary + "i";
        else
            return dReal + "-" + -dImaginary + "i";
    }


    // ================================================================  
    // Complex number arithmetic 


    // Compute sum of two complex numbers cA + cB
    public Complex Add(Complex cB ) {
        Complex sum = new Complex();

        sum.dReal      = dReal      + cB.dReal;
        sum.dImaginary = dImaginary + cB.dImaginary;

        return (sum);
    }


    // Compute difference of two complex numbers cA - cB
    public Complex Sub( Complex cB ) {
        Complex diff = new Complex();

        diff.dReal      = dReal      - cB.dReal;
        diff.dImaginary = dImaginary - cB.dImaginary;

        return (diff);
    }

    // Compute product of two complex numbers cA * cB

    public Complex Mult( Complex cB ) {
        Complex prod = new Complex();

        prod.dReal      = dReal*cB.dReal      - dImaginary*cB.dImaginary;
        prod.dImaginary = dImaginary*cB.dReal + dReal*cB.dImaginary;

        return (prod);
    }

    // Compute divisor of two complex numbers cA / cB

    public Complex Div( Complex cB ) {
        Complex div = new Complex();
        double dR, dDen;

        if(Math.abs( cB.dReal ) >= Math.abs( cB.dImaginary )) {
            dR   = cB.dImaginary/cB.dReal;
            dDen = cB.dReal + dR*cB.dImaginary;
            div.dReal      = (dReal      + dR*dImaginary)/dDen;
            div.dImaginary = (dImaginary - dR*dReal)/dDen;
        } else {
            dR   = cB.dReal/cB.dImaginary;
            dDen = cB.dImaginary + dR*cB.dReal;
            div.dReal      = (dR*dReal      + dImaginary)/dDen;
            div.dImaginary = (dR*dImaginary - dReal)/dDen;
        }

        return (div);
    }
    // ================================================================  


   
    // Exercise methods in Complex class

    public static void main (String args[]) {

        // Setup and print two complex numbers 

        Complex cA = new Complex( 1.0, 2.0 );
        Complex cB = new Complex( 3.0, 4.0 );

        System.out.println("cA = " + cA.toString() );
        System.out.println("cB = " + cB.toString() );

        // Output

        Complex cC = cA.Add( cB );
        System.out.println("Complex   cA + cB = " + cC.toString() );
        Complex cD = cA.Sub( cB );
        System.out.println("Complex   cA - cB = " + cD.toString() );
        Complex cE = cA.Mult( cB );
        System.out.println("Complex   cA * cB = " + cE.toString() );
        Complex cF = cA.Div( cB );
        System.out.println("Complex   cA / cB = " + cF.toString() );

    }
}

从复坐标创建一个尺寸为n的集合(Hashset)

它只是存储一组
n
复数

将其转移到一个完成/乘以其元素的方法

使用已有的
Mult
方法将所有
n
复数相乘

Set<Complex> complexNumbers = new HashSet<>();
//add numbers to it

Optional<Complex> result = complexNumbers.stream()
   .reduce((c1, c2) -> c1.Mult(c2)); //or .reduce(Complex::Mult)
Set complexNumbers=new HashSet();
//加上数字
可选结果=complexNumbers.stream()
.reduce((c1,c2)->c1.Mult(c2))//or.reduce(复杂::Mult)

注:Java命名惯例是以小写字母开始命名方法(
mult
multiply
将是合理的名称)

关于第一点,如果指令只是“创建一个尺寸为n的集合(Hashset)”,我同意这种解释,但“…来自复杂坐标”的部分会让人困惑。我的猜测是
n
(大小)是基于复数的数量,但它仍然只是一个猜测(但可能这只是我对英语的有限理解)。@Pshemo该集合不能用于单独存储实部和虚部(
2+2i
-集合中只能有一个
2
)。因此我假设它是用来存储实际的复杂对象的。我的猜测是,指令应该听起来更像“…复数坐标的维数n”甚至“…复数的维数n”,而不是“…复数坐标的维数n”@Pshemo Yes。Agreed@Pshemo在俄语中,它听起来像是“复数的n维”,我不知道它在英语中如何听起来更正确。从你的问题来看,在Java约定中,方法应该以小写开头,就像
main
,所以将
Mult
改为
Mult
,将
Div
改为
Div
。如果你使用完整的单词,比如“代码>乘法< /代码>和除< /代码>,我会考虑更多的。