English 中文(简体)
Java 复杂数量,3类
原标题:Java Complex Numbers, 3 Classes
  • 时间:2012-04-11 02:09:01
  •  标签:
  • java

我重复我在

第一类;界定复杂数目的类别。 我发现这一点非常容易,我的答案如下。

public class Complex {
    private double real;
    private double imaginary;

    public Complex()
    {
        this( 0.0, 0.0 );
    }

    public Complex( double r, double i )
    {
        real = r;
        imaginary = i;
    } 
}

第二类;用公开静态方法添加和背叛,回顾从头等到下一类的实际和想象力。 由于我没有百分之百地了解这一点,因此,我认为这个部分没有什么挑战性。

Public class ComplexArith
public static ComplexAdd(Complex one, Complex two)
return Complex(one.getReal() + two.getReal(), one.getImaginary() + two.getImaginary());

public static ComplexSub(Complex one, Complex two)
return Complex(one.getReal() - two.getReal(), one.getImaginary - two.getImaginary());

第三部分是要求用户投入,增加并减去一系列复杂数字。 我不熟悉这一点,因为我从未要求用户以(0.0,0.0)格式提供投入。

对整体法典的任何见解? 我哪怕是在正确轨道上?

EDIT:

第一类禁止。 谢谢大家。

第二类 我在汇编问题,因为我不充分了解一些东西。

public class ComplexArith{
public static Complex add(Complex one, Complex two)
{
return Complex(one.getReal() + two.getReal(), one.getImaginary() + two.getImaginary());
}
public static Complex sub(Complex one, Complex two)
{
return Complex(one.getReal() - two.getReal(), one.getImaginary - two.getImaginary());
}
}

我知道需要界定一个和两个,但我不理解如何界定这些定义。 我会把他们定义为什么? 我认为,它被从两倍的“复杂”中称为“复杂”类。

我也想到<代码>。 这是第一类。

public class Complex
{
private double real;
private double imaginary;

public Complex()
{
    this( 0.0, 0.0 );
}


public Complex( double r, double i )
{
    real = r;
    imaginary = i;
}

public double getReal() {
  return this.real;
}

public double getImaginary() {
  return this.imaginary;
}
}
问题回答

你完全回到正确的轨道上,但你需要上<条码>。

例如:

   public class Complex
{
    private double real;
    private double imaginary;

    public Complex()
    {
        this( 0.0, 0.0 );
    }


    public Complex( double r, double i )
    {
        real = r;
        imaginary = i;
    }

    public double getReal() {
      return this.real;
    }

    public double getImaginary() {
      return this.imaginary;
    }
}

你们还需要返回的方法:

public class ComplexArith
{   
    public static Complex complexAdd(Complex one, Complex two) {
        return Complex(one.getReal() + two.getReal(),
                      one.getImaginary() + two.getImaginary());
    }

    public static Complex complexSub(Complex one, Complex two) {
        return Complex(one.getReal() - two.getReal(),
                       one.getImaginary - two.getImaginary());
    }
}

而且,它与贵方案的功能没有任何关系,但习惯上是使用<条码>Case。 因此,你的方法应当如此:

public static Complex complexAdd(Complex one, Complex two) {
    return Complex(one.getReal() + two.getReal(), 
                  one.getImaginary() + two.getImaginary());
}

个人而言,我把这些算术行动放在复杂类别中。 这些都是在复杂数量上的真正行动,因此,我将不把他们放在复杂类别之外。

我想使复杂性变得不可改变。 这样,它就变得安全。

我喜欢静态添加、子、 m、 d等方法。 确保他们返回一个建筑群(现在还没有)。 其他方法,如ine、ine等,可能属于你复杂的一揽子方案中的一个数学类别。 见java.lang。 数学是真实数字的例子。

你们需要返回“新建筑”。 你写成的法典汇编。

这是我的执行,即:

package name.puzio.math;

public final class ComplexNumber {
private final double imaginary;
private final double real;

@Override
public final boolean equals(Object object) {
    if (!(object instanceof ComplexNumber))
        return false;
    ComplexNumber a = (ComplexNumber) object;
    return (real == a.real) && (imaginary == a.imaginary);
}

public ComplexNumber(double real, double imaginary) {
    this.imaginary = imaginary;
    this.real = real;
}

public static final ComplexNumber createPolar(double amount, double angel) {
    return new ComplexNumber(amount * Math.cos(angel), amount * Math.sin(angel));
}

public final double getImaginary() {
    return imaginary;
}

public final double getReal() {
    return real;
}

public final double getAmount() {
    return Math.sqrt((real * real) + (imaginary * imaginary));
}

public final double getAngle() {
    return Math.atan2(imaginary, real);
}

public final ComplexNumber add(ComplexNumber b) {
    return add(this, b);
}

public final ComplexNumber sub(ComplexNumber b) {
    return sub(this, b);
}

public final ComplexNumber div(ComplexNumber b) {
    return div(this, b);
}

public final ComplexNumber mul(ComplexNumber b) {
    return mul(this, b);
}

public final ComplexNumber conjugation() {
    return conjugation(this);
}

/**
 * Addition:
 * @param a
 * @param b
 * @return
 */
private final static ComplexNumber add(ComplexNumber a, ComplexNumber b) {
    return new ComplexNumber(a.real + b.real, a.imaginary + b.imaginary);
}

/**
 * Subtraktion:
 * @param a
 * @param b
 * @return
 */
private final static ComplexNumber sub(ComplexNumber a, ComplexNumber b) {
    return new ComplexNumber(a.real - b.real, a.imaginary - b.imaginary);
}

/**
 * Multiplikation:
 * @param a
 * @param b
 * @return
 **/
private final static ComplexNumber mul(ComplexNumber a, ComplexNumber b) {
    return new ComplexNumber((a.real * b.real) - (a.imaginary * b.imaginary), (a.imaginary * b.real) + (a.real * b.imaginary));
}

/**
 * Division:
 * @param a
 * @param b
 * @return
 **/
private final static ComplexNumber div(ComplexNumber a, ComplexNumber b) {
    double d = (b.real * b.real) + (b.imaginary * b.imaginary);
    if (d == 0)
        return new ComplexNumber(Double.NaN, Double.NaN);
    return new ComplexNumber(((a.real * b.real) + (a.imaginary * b.imaginary)) / d, ((a.imaginary * b.real) - (a.real * b.imaginary)) / d);
}

/**
 * Konjugation:
 * @param a
 * @return
 **/

private final static ComplexNumber conjugation(ComplexNumber a) {
    return new ComplexNumber(a.real, -a.imaginary);
}
}

鉴于你说的是任务,你在正确的轨道上稍有回升。

但是,在您的第二类中,您是:getReal(getImaginary(, 反对。 但是,其定义没有在<条码>中显示任何情况。

您在<代码>上采用的方法没有返回类型。

仅靠这样做,就将妨碍你们的法典编纂成法典。

虽然这一点已经得到了答复,但我认为,以下几类人员可能受益,这些班子与复杂号码有关的许多职能。

已在麻省理工学院颁发许可证,Gite Hub项目here

/**
 * <code>ComplexNumber</code> is a class which implements complex numbers in Java. 
 * It includes basic operations that can be performed on complex numbers such as,
 * addition, subtraction, multiplication, conjugate, modulus and squaring. 
 * The data type for Complex Numbers.
 * <br /><br />
 * The features of this library include:<br />
 * <ul>
 * <li>Arithmetic Operations (addition, subtraction, multiplication, division)</li>
 * <li>Complex Specific Operations - Conjugate, Inverse, Absolute/Magnitude, Argument/Phase</li>
 * <li>Trigonometric Operations - sin, cos, tan, cot, sec, cosec</li>
 * <li>Mathematical Functions - exp</li>
 * <li>Complex Parsing of type x+yi</li>
 * </ul>
 * 
 * @author      Abdul Fatir
 * @version     1.1
 * 
 */
public class ComplexNumber
{
    /**
    * Used in <code>format(int)</code> to format the complex number as x+yi
    */
    public static final int XY = 0;
    /**
    * Used in <code>format(int)</code> to format the complex number as R.cis(theta), where theta is arg(z)
    */
    public static final int RCIS = 1;
    /**
    * The real, Re(z), part of the <code>ComplexNumber</code>.
    */
    private double real;
    /**
    * The imaginary, Im(z), part of the <code>ComplexNumber</code>.
    */
    private double imaginary;
    /**
    * Constructs a new <code>ComplexNumber</code> object with both real and imaginary parts 0 (z = 0 + 0i).
    */
    public ComplexNumber()
    {
        real = 0.0;
        imaginary = 0.0;
    }

    /**
    * Constructs a new <code>ComplexNumber</code> object.
    * @param real the real part, Re(z), of the complex number
    * @param imaginary the imaginary part, Im(z), of the complex number
    */

    public ComplexNumber(double real, double imaginary)
    {
        this.real = real;
        this.imaginary = imaginary;
    }

    /**
    * Adds another <code>ComplexNumber</code> to the current complex number.
    * @param z the complex number to be added to the current complex number
    */

    public void add(ComplexNumber z)
    {
        set(add(this,z));
    }

    /**
    * Subtracts another <code>ComplexNumber</code> from the current complex number.
    * @param z the complex number to be subtracted from the current complex number
    */

    public void subtract(ComplexNumber z)
    {
        set(subtract(this,z));
    }

    /**
    * Multiplies another <code>ComplexNumber</code> to the current complex number.
    * @param z the complex number to be multiplied to the current complex number
    */

    public void multiply(ComplexNumber z)
    {
        set(multiply(this,z));
    }
    /**
    * Divides the current <code>ComplexNumber</code> by another <code>ComplexNumber</code>.
    * @param z the divisor
    */  
    public void divide(ComplexNumber z)
    {
        set(divide(this,z));
    }
    /**
    * Sets the value of current complex number to the passed complex number.
    * @param z the complex number
    */
    public void set(ComplexNumber z)
    {
        this.real = z.real;
        this.imaginary = z.imaginary;
    }
    /**
    * Adds two <code>ComplexNumber</code>.
    * @param z1 the first <code>ComplexNumber</code>.
    * @param z2 the second <code>ComplexNumber</code>.
    * @return the resultant <code>ComplexNumber</code> (z1 + z2).
    */
    public static ComplexNumber add(ComplexNumber z1, ComplexNumber z2)
    {
        return new ComplexNumber(z1.real + z2.real, z1.imaginary + z2.imaginary);
    }

    /**
    * Subtracts one <code>ComplexNumber</code> from another.
    * @param z1 the first <code>ComplexNumber</code>.
    * @param z2 the second <code>ComplexNumber</code>.
    * @return the resultant <code>ComplexNumber</code> (z1 - z2).
    */  
    public static ComplexNumber subtract(ComplexNumber z1, ComplexNumber z2)
    {
        return new ComplexNumber(z1.real - z2.real, z1.imaginary - z2.imaginary);
    }
    /**
    * Multiplies one <code>ComplexNumber</code> to another.
    * @param z1 the first <code>ComplexNumber</code>.
    * @param z2 the second <code>ComplexNumber</code>.
    * @return the resultant <code>ComplexNumber</code> (z1 * z2).
    */  
    public static ComplexNumber multiply(ComplexNumber z1, ComplexNumber z2)
    {
        double _real = z1.real*z2.real - z1.imaginary*z2.imaginary;
        double _imaginary = z1.real*z2.imaginary + z1.imaginary*z2.real;
        return new ComplexNumber(_real,_imaginary);
    }
    /**
    * Divides one <code>ComplexNumber</code> by another.
    * @param z1 the first <code>ComplexNumber</code>.
    * @param z2 the second <code>ComplexNumber</code>.
    * @return the resultant <code>ComplexNumber</code> (z1 / z2).
    */      
    public static ComplexNumber divide(ComplexNumber z1, ComplexNumber z2)
    {
        ComplexNumber output = multiply(z1,z2.conjugate());
        double div = Math.pow(z2.mod(),2);
        return new ComplexNumber(output.real/div,output.imaginary/div);
    }

    /**
    * The complex conjugate of the current complex number.
    * @return a <code>ComplexNumber</code> object which is the conjugate of the current complex number
    */

    public ComplexNumber conjugate()
    {
        return new ComplexNumber(this.real,-this.imaginary);
    }

    /**
    * The modulus, magnitude or the absolute value of current complex number.
    * @return the magnitude or modulus of current complex number
    */

    public double mod()
    {
        return Math.sqrt(Math.pow(this.real,2) + Math.pow(this.imaginary,2));
    }

    /**
    * The square of the current complex number.
    * @return a <code>ComplexNumber</code> which is the square of the current complex number.
    */

    public ComplexNumber square()
    {
        double _real = this.real*this.real - this.imaginary*this.imaginary;
        double _imaginary = 2*this.real*this.imaginary;
        return new ComplexNumber(_real,_imaginary);
    }
    /**
    * @return the complex number in x + yi format
    */
    @Override
    public String toString()
    {
        String re = this.real+"";
        String im = "";
        if(this.imaginary < 0)
            im = this.imaginary+"i";
        else
            im = "+"+this.imaginary+"i";
        return re+im;
    }
    /**
    * Calculates the exponential of the <code>ComplexNumber</code>
    * @param z The input complex number
    * @return a <code>ComplexNumber</code> which is e^(input z)
    */
    public static ComplexNumber exp(ComplexNumber z)
    {
        double a = z.real;
        double b = z.imaginary;
        double r = Math.exp(a);
        a = r*Math.cos(b);
        b = r*Math.sin(b);
        return new ComplexNumber(a,b);
    }
    /**
    * Calculates the <code>ComplexNumber</code> to the passed integer power.
    * @param z The input complex number
    * @param power The power.
    * @return a <code>ComplexNumber</code> which is (z)^power
    */
    public static ComplexNumber pow(ComplexNumber z, int power)
    {
        ComplexNumber output = new ComplexNumber(z.getRe(),z.getIm());
        for(int i = 1; i < power; i++)
        {
            double _real = output.real*z.real - output.imaginary*z.imaginary;
            double _imaginary = output.real*z.imaginary + output.imaginary*z.real;
            output = new ComplexNumber(_real,_imaginary);
        }
        return output;
    }
    /**
    * Calculates the sine of the <code>ComplexNumber</code>
    * @param z the input complex number
    * @return a <code>ComplexNumber</code> which is the sine of z.
    */
    public static ComplexNumber sin(ComplexNumber z)
    {
        double x = Math.exp(z.imaginary);
        double x_inv = 1/x;
        double r = Math.sin(z.real) * (x + x_inv)/2;
        double i = Math.cos(z.real) * (x - x_inv)/2;
        return new ComplexNumber(r,i);
    }
    /**
    * Calculates the cosine of the <code>ComplexNumber</code>
    * @param z the input complex number
    * @return a <code>ComplexNumber</code> which is the cosine of z.
    */
    public static ComplexNumber cos(ComplexNumber z)
    {
        double x = Math.exp(z.imaginary);
        double x_inv = 1/x;
        double r = Math.cos(z.real) * (x + x_inv)/2;
        double i = -Math.sin(z.real) * (x - x_inv)/2;
        return new ComplexNumber(r,i);
    }
    /**
    * Calculates the tangent of the <code>ComplexNumber</code>
    * @param z the input complex number
    * @return a <code>ComplexNumber</code> which is the tangent of z.
    */
    public static ComplexNumber tan(ComplexNumber z)
    {
        return divide(sin(z),cos(z));
    }
    /**
    * Calculates the co-tangent of the <code>ComplexNumber</code>
    * @param z the input complex number
    * @return a <code>ComplexNumber</code> which is the co-tangent of z.
    */
    public static ComplexNumber cot(ComplexNumber z)
    {
        return divide(new ComplexNumber(1,0),tan(z));
    }
    /**
    * Calculates the secant of the <code>ComplexNumber</code>
    * @param z the input complex number
    * @return a <code>ComplexNumber</code> which is the secant of z.
    */
    public static ComplexNumber sec(ComplexNumber z)
    {
        return divide(new ComplexNumber(1,0),cos(z));
    }
    /**
    * Calculates the co-secant of the <code>ComplexNumber</code>
    * @param z the input complex number
    * @return a <code>ComplexNumber</code> which is the co-secant of z.
    */
    public static ComplexNumber cosec(ComplexNumber z)
    {
        return divide(new ComplexNumber(1,0),sin(z));
    }
    /**
    * The real part of <code>ComplexNumber</code>
    * @return the real part of the complex number
    */
    public double getRe()
    {
        return this.real;
    }
    /**
    * The imaginary part of <code>ComplexNumber</code>
    * @return the imaginary part of the complex number
    */
    public double getIm()
    {
        return this.imaginary;
    }
    /**
    * The argument/phase of the current complex number.
    * @return arg(z) - the argument of current complex number
    */
    public double getArg()
    {
        return Math.atan2(imaginary,real);
    }
    /**
    * Parses the <code>String</code> as a <code>ComplexNumber</code> of type x+yi.
    * @param s the input complex number as string
    * @return a <code>ComplexNumber</code> which is represented by the string.
    */
    public static ComplexNumber parseComplex(String s)
    {
        s = s.replaceAll(" ","");
        ComplexNumber parsed = null;
        if(s.contains(String.valueOf("+")) || (s.contains(String.valueOf("-")) && s.lastIndexOf( - ) > 0))
        {
            String re = "";
            String im = "";
            s = s.replaceAll("i","");
            s = s.replaceAll("I","");
            if(s.indexOf( + ) > 0)
            {
                re = s.substring(0,s.indexOf( + ));
                im = s.substring(s.indexOf( + )+1,s.length());
                parsed = new ComplexNumber(Double.parseDouble(re),Double.parseDouble(im));
            }
            else if(s.lastIndexOf( - ) > 0)
            {
                re = s.substring(0,s.lastIndexOf( - ));
                im = s.substring(s.lastIndexOf( - )+1,s.length());
                parsed = new ComplexNumber(Double.parseDouble(re),-Double.parseDouble(im));
            }
        }
        else
        {
            // Pure imaginary number
            if(s.endsWith("i") || s.endsWith("I"))
            {
                s = s.replaceAll("i","");
                s = s.replaceAll("I","");
                parsed = new ComplexNumber(0, Double.parseDouble(s));
            }
            // Pure real number
            else
            {
                parsed = new ComplexNumber(Double.parseDouble(s),0);
            }
        }
        return parsed;
    }
    /**
    * Checks if the passed <code>ComplexNumber</code> is equal to the current.
    * @param z the complex number to be checked
    * @return true if they are equal, false otherwise
    */
    @Override
    public final boolean equals(Object z) 
    {
        if (!(z instanceof ComplexNumber))
            return false;
        ComplexNumber a = (ComplexNumber) z;
        return (real == a.real) && (imaginary == a.imaginary);
    }
    /**
    * The inverse/reciprocal of the complex number.
    * @return the reciprocal of current complex number.
    */
    public ComplexNumber inverse()
    {
        return divide(new ComplexNumber(1,0),this);
    }
    /**
    * Formats the Complex number as x+yi or r.cis(theta)
    * @param format_id the format ID <code>ComplexNumber.XY</code> or <code>ComplexNumber.RCIS</code>.
    * @return a string representation of the complex number
    * @throws IllegalArgumentException if the format_id does not match.
    */
    public String format(int format_id) throws IllegalArgumentException
    {
        String out = "";
        if(format_id == XY)
            out = toString();
        else if(format_id == RCIS)
        {
            out = mod()+" cis("+getArg()+")";
        }
        else
        {
            throw new IllegalArgumentException("Unknown Complex Number format.");
        }
        return out;
    }
}

或者,你只能放弃所有这种非专利和公正使用阿帕奇科共用图书馆,该图书馆比任何东西都做得更好,包括像复杂的权宜之计等必要业务。

但如果你不喜欢重新发明轮椅的话。

<correct way to transformation a String in the form(r,i) into a Complex, be used a regular expression. 然而,如果你重新制定你的教员方案,可能会怀疑你从互联网上复制这一解决办法: 类似情况:

public static Complex fromString(String str) {
    str = str.substring(1, str.length() - 1);
    String[] parts = str.split(",");
    double r = Double.valueOf(parts[0]);
    double i = Double.valueOf(parts[1]);
    return new Complex(r, i);
}

http://docs/api/java/lang/String.html>。

这不正确!

 public static ComplexNumber exp(ComplexNumber z)
{
    double a = z.real;
    double b = z.imaginary;
    double r = Math.exp(a);
    a = r*Math.cos(b);
    b = r*Math.sin(b);
    return new ComplexNumber(a,b);
}

应当:

 public static ComplexNumber exp(ComplexNumber z)
{
    double theta = Math.atan2(r.real/r.imag);
    double r =  mod();
    double a = r*Math.cos(theta );
    double b = r*Math.sin(theta );
    return new ComplexNumber(a,b);
}




相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...

热门标签