0

私のメインクラスには、次のコードがあります。

Polynomial P = new Polynomial(polynomial);

別のクラスには、次のコードがあります。

public class Polynomial {

    private int[] polynomial;

    public Polynomial(int[] polynomial) {
        this.polynomial = polynomial;
    }
}

コンストラクタ Polynomial(int[]) が定義されていないのはなぜですか?

ちなみに...メインクラスの多項式は次を指しています:

int [] polynomial = new int[count];

これは完全なメイン クラスです:

import javax.swing.JOptionPane;
import java.util.Scanner;
import java.util.Arrays;
public class Main {

public static void main(String[] args) {
    String input = JOptionPane.showInputDialog(null, "This is the Polynomial Cal" +
            "culator Menu. Please ente" +
                "r your menu selection:\n (1) Enter c" +
                    "oefficients of polynomial P(x). \n (2) Enter co" +
                    "efficients of polynomial Q(x). \n (3) Sum polynomi" +
                        "als P(x) and Q(x). \n (4) Multiply polynomials P(x) and Q(" +
                            "x). \n (5) Quit.", "Polynomial Menu",JOptionPane.PLAIN_MESSAGE);
    Scanner inputScanner =new Scanner(input);           //Scanner for Menu
    int userChoice = inputScanner.nextInt();            //Menu Choice
    if(userChoice>=1 && userChoice<=5)                  //User Input Catch
    {
        switch(userChoice)
        {
        case 1: String coefficientInput= JOptionPane.showInputDialog(null, "Please enter th" +
                "e coefficients of the terms in the polynom" +
                    "ial.(Ax^n, Bx^(n-1)...Yx,Z) \n Only ent" +
                        "er the values of the coeffien" +
                            "ts i.e (A + B - C + D) ");
                Scanner countScanner = new Scanner(coefficientInput);       //Scanner for count
                int coefficient= countScanner.nextInt();
                int count=1;
                while(countScanner.hasNextInt())
                {
                    count++;
                    countScanner.nextInt();
                }
                int [] polynomial = new int[count];                         //Size of Array=Count
                Scanner coefficientScanner = new Scanner(coefficientInput);
                int term = 0;
                System.out.println(count);
                int i=0;
                while(coefficientScanner.hasNextInt())                                  //Initialisation of array
                {
                    term=coefficientScanner.nextInt();
                    polynomial[i]=term;
                    i++;
                }
                Polynomial P = new Polynomial(polynomial);

        }
    }
    else
    {
        JOptionPane.showMessageDialog(null, "No option selected. Please try again.","Input Error",JOptionPane.ERROR_MESSAGE);
    }

}

}

多項式でエラーが発生 P =new Polynomial(多項式)

4

3 に答える 3

2

polynomialメインクラスで名前が付けられた参照が . を指していないと推測していint []ます。型の参照である場合は、 (別名「コピー コンストラクター」)Polynomialを取る別のコンストラクターを作成するか、型を変更する必要があります。Polynomialpolynomial

あなたがそのコンストラクタを書いた方法が好きではありません。そのようにプライベートではありません。渡す参照は変更可能です。防御コピーを作成します。これが私がそれを行う方法です:

public class Polynomial {

    private int[] coefficients;

    public Polynomial(int[] coefficients) {
        if (coefficients == null) throw new IllegalArgumentException("coefficients cannot be null");
        this.coefficients = new int[coefficients.length];
        System.arraycopy(0, coefficients, 0, this.coefficients, this.coefficients.length);
    }

    public Polynomial(Polynomial p) {
        this(p.coefficients);
    }
}

これも素朴なデザインです。浮動小数点係数はありませんか? のようなものをモデル化したい場合は非効率的ですy = x^1000 + 1。非常に大きな配列にゼロ以外の係数が 2 つあります。

より良い設計は、それらを作成しMonomialPolynomial維持するListことです。

于 2013-03-12T12:23:47.307 に答える
0

OK.コードを 1 行削除して再入力したところ、機能しました。何が起きたのでしょうか??

于 2013-03-12T12:55:40.530 に答える
0

次のコードは問題なくコンパイルされ、クラス定義とコンストラクターに問題はありません。

整数配列の定義と初期化の方法に注意してください。

public static void main(String[] args){
    int[] polynomial = new int[]{2, 1, 2};
    Polynomial P = new Polynomial(polynomial);
}
于 2013-03-12T12:29:23.777 に答える