2

配列生成アルゴリズムが必要なプログラムを開発していますが、コードは機能するはずSystem.out.println();ですが、コードの終わり近くでわかるように、すべてのエントリがまったく同じです。

コードの残りのすべての部分をチェックしましたが、すべてがスムーズに実行されました。この 1 つのアルゴリズムだけで、頭を包み込むことができないようです。

public static ZetaTestTriple[] getTripleArray(int jRange, int kRange, int nRange, MathContext mc){
    ZetaTestTriple[] r = new ZetaTestTriple[(8*(jRange+1)*(kRange)*nRange)];
    int i=0;
    for(int j=0;j<jRange+1;j++){
        for(int k=1;k<kRange;k++){
            for(int n=1;n<nRange+1;n++){
                System.out.println("j="+j+"||k="+k+"||n="+n);
                r[i+0]=new ZetaTestTriple(j,k,n,mc);
                r[i+1]=new ZetaTestTriple(-j,k,n,mc);
                r[i+2]=new ZetaTestTriple(-j,-k,n,mc);
                r[i+3]=new ZetaTestTriple(-j,k,-n,mc);
                r[i+4]=new ZetaTestTriple(j,-k,-n,mc);
                r[i+5]=new ZetaTestTriple(j,k,-n,mc);
                r[i+6]=new ZetaTestTriple(j,-k,n,mc);
                r[i+7]=new ZetaTestTriple(-j,-k,-n,mc);
                i+=8;
            }
        }
    }
    System.out.println("2013="+r[2013].toString());//(-10 * pi^-9)/-10
    System.out.println("3172="+r[3172].toString());//(-10 * pi^-9)/-10
    System.out.println("1283="+r[1283].toString());//(-10 * pi^-9)/-10
    System.out.println("7412="+r[7412].toString());//(-10 * pi^-9)/-10
    //They're all the same...
    return r;
}

編集: ZetaTestTriple コンストラクターは次のとおりです。

    private static BigDecimal j,n;
private static int k;
private static MathContext mc;

public ZetaTestTriple(int J, int K, int N, MathContext mathC){
    j=new BigDecimal(J);k=K;n=new BigDecimal(N);
    mc=mathC;
}
4

1 に答える 1

8

問題は、属性が静的であることです。

private static BigDecimal j,n;
private static int k;
private static MathContext mc;

それらをstaticとして宣言すると、クラスがインスタンス化されるたびに上書きされます。

于 2013-08-08T14:06:08.790 に答える