1

このミッションを完了するために考える必要があると思われる方法で、で行う必要があることを繰り返します。(申し訳ありませんが、私はプログラミングが初めてです)。

ファーストクラス; 複素数のクラスを定義します。これはかなり簡単だと思いました。私の答えは以下のとおりです。

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 static メソッドで加算と減算を行います。この部分は、100% 把握していないため、少し難しいと感じました。

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());

3 番目の部分は、ユーザー入力を要求し、複素数のセットを加算および減算することです。(0.0,0.0) 形式でユーザー入力を要求する必要がなかったため、これに慣れていません。

コード全体に関する洞察はありますか? 私は正しい軌道に乗っていますか?

編集:

私が打ちのめした最初のクラス。ありがとうございます。

2 番目のクラス 何かを完全に理解していないため、コンパイルに問題があります。

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());
}
}

one と two を定義する必要があることはわかっていますが、それらを定義する方法がわかりません。私はそれらを何と定義しますか?double r、double iのComplexクラスから呼び出されていると思いました。

.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;
}
}
4

8 に答える 8

2

あなたは正しい軌道に乗っていますが、Complexオブジェクトにゲッターが必要です。

例えば:

   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());
    }
}

また、プログラムの機能とは何の関係もありませんが、メソッドで を使用するのが通例camelCaseです。したがって、メソッドは次のようになります。

public static Complex complexAdd(Complex one, Complex two) {
    return Complex(one.getReal() + two.getReal(), 
                  one.getImaginary() + two.getImaginary());
}
于 2012-04-11T02:16:56.993 に答える
2

個人的には、これらの算術演算を Complex クラスに入れます。これらは実際には Complex 数に対する操作であるため、Complex クラスの外にカプセル化することはしません。

Complex を不変にすることを考えます。そのようにスレッドセーフです。

静的な add、sub、mul、div メソッドが好きです。それらが Complex を返すことを確認してください (現在はそうではありません)。cosine、sine などの他のメソッドは、複雑なパッケージの Math クラスに属している場合があります。実数の例については、java.lang.Math を参照してください。

「新しい複合体」を返す必要があります。あなたが書いたコードはコンパイルされません。

于 2012-04-11T02:18:18.190 に答える
0

形式のaをaに変換する正しい方法は、正規表現を使用することです。ただし、プログラミングに不慣れな場合は、インストラクターがそのソリューションをインターネットからコピーしたのではないかと疑うかもしれません:)次のようなことを試してください。String(r,i)Complex

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);
}

Java Stringクラスの詳細については、http://docs.oracle.com/javase/6/docs/api/java/lang/String.htmlを参照してください。

于 2012-04-11T02:48:14.587 に答える
0

あなたが述べていることが割り当てであることを考えると、あなたはいくらか正しい軌道に乗っています。

ただし、2 番目のクラスでは、オブジェクトのメソッドを呼び出しgetReal()ています。しかし、それらの定義はクラス定義のどこにも表示されません。getImaginary()ComplexComplex

また、メソッドにComplexArithは戻り値の型がありません。

それらだけでは、コードをそのままコンパイルできなくなります。

于 2012-04-11T02:15:48.110 に答える