0

最も近い一致を取得しようとしている値から、配列の列 1 に保持されている値を減算する目的で、配列内の値にアクセスする際に問題があります。double から int に変換できない型の不一致エラーが表示されます

余談ですが、問題に正しい方法で取り組んでいるかどうかは確かです。探している値に最も近い値について列 1 の値をチェックするテーブルがあり、その行の他の列は返す必要がある値です。(AD&D をプレイした場合、AD&D のいくつかのテーブルのように考えてください)

// Column 1 ability score,  2 Damage mod, 3 Lift , 4 carry, 5 drag
double arr [][] = {{1.01,-7,11,9,28},
                   {1.51,-6,25,12,63},
                   {2.01,-6,38,14,96},
                   {2.51,-5,51,14,96},
                   {3.01,-5,51,17,128}};

public double EXTcha(double cha) {
    double closestNo = 0;
    double lookingFor = cha;
    int reqIndex = 0;
    double i;

    for (int row=0; row < arr.length; row++) {
        System.out.println(row+"row \t");
        double currentDiff = (lookingFor-arr[i][0]);
        System.out.println(currentDiff+"diff \t");
        if (currentDiff < closestNo) {
            closestNo = currentDiff;
            System.out.println(closestNo+"closest \t");
            reqIndex = row;
        };
    }

    for (int column=0; column<arr[reqIndex].length;column++) {
        System.out.println(arr[reqIndex][column]+"\t");
    }

    return extcha;
}

提案された変更を加えた後の他の人のためのコードは次のとおりです

// Column 1 ability score,  2 Damage mod, 3 Lift , 4 carry, 5 drag
double arr [][] = {{1.01,-7,11,9,28},
                   {1.51,-6,25,12,63},
                   {2.01,-6,38,14,96},
                   {2.51,-5,51,14,96},
                   {3.01,-5,51,17,128}};

public double EXTcha(double cha) {
    double closestNo = 50;
    double lookingFor = cha;
    int reqIndex = 0;

    for (int row=0; row < arr.length; row++) {
        System.out.println(row+"row \t");
        double currentDiff = Math.abs(lookingFor-arr[row][0]);
        System.out.println(currentDiff+"diff \t");
        if (currentDiff < closestNo){
            closestNo = currentDiff;
            System.out.println(closestNo+"closest \t");
            reqIndex = row;
        };
    }

    for (int column=0; column<arr[reqIndex].length;column++) {
        System.out.println(arr[reqIndex][column]+"\t");
}

    return extcha;
}

0 に初期化すると別の問題が発生closestNoしました。これは、それに対してテストしたときに(currentDiff < closestNo)常により小さいということを意味していたので、50 に設定しました。これは、列 1 に保持されている double 値よりも常に大きくなります。

これが誰かに役立つことを願っています

4

4 に答える 4

3

double として宣言iし、それを (整数) 配列インデックスとして使用しようとしました。欲しいと思いますdouble currentDiff = (lookingFor-arr[row][0]);

于 2012-05-07T13:07:54.803 に答える
2

アルゴリズムには (少なくとも) 1 つのバグがあります。

double currentDiff = (lookingFor-arr[i][0]);

最も近い一致を取得するには、ここで差の絶対値を使用する必要があります。そうしないと、上記の式の中で最小のの結果が得られるため、常に最後の行 (最大値) に「一致」することになります。

(そして、他の人が素早く述べたように、int配列へのインデックス付けには s を使用する必要があります)。

全体として、あなたのアプローチは非常に低レベルで脆弱です。このジョブでは、キーが行の最初の要素であり、値が各行の残りの数値を含むNavigableMap、などの実装を使用することをお勧めします。たとえば、次のようになります。TreeMapList

NavigableMap<Double, List<Double>> characteristics = 
        new TreeMap<Double, List<Double>>();
characteristics.put(1.01, Arrays.asList(-7.0, 11.0, 9.0, 28.0));
...
Double key = characteristics.floorKey(cha);
// Null check omitted for brevity
List<Double> matchingCharacteristics = characteristics.get(key);
于 2012-05-07T13:07:40.520 に答える
0

arr[i]iは配列への整数インデックスである必要がありますが、 であると宣言しiますdouble

代わりに欲しいと思いますarr[row]、つまりdouble currentDiff = (lookingFor-arr[row][0]);

于 2012-05-07T13:07:57.977 に答える
0

インデックス i: の配列にアクセスしようとしていますarr[i][0]が、i は double です。オブジェクト指向プログラミングとオブジェクト指向設計について学ぶべきだと思います。

于 2012-05-07T13:08:43.123 に答える