类型不匹配访问数组

时间:2012-05-07 13:01:33

标签: java multidimensional-array

我在访问数组中的值时遇到问题,目的是从我试图获得最接近匹配的值中减去数组第1列中保存的值。我得到类型不匹配错误无法从double转换为int

作为一点点,我甚至可以确定我是否正在以正确的方式解决问题。我有一个表,我检查第1列中的值,找到与我正在寻找的值最接近的值,该行中的其他列是需要返回的值。 (想想有点像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;
}

我遇到了另一个问题,将closestNo初始化为0意味着当我对(currentDiff < closestNo)进行测试时,它总是小于...我将其设置为50,这将始终大于保持的双倍值第1栏。

我希望这可以帮助某人

4 个答案:

答案 0 :(得分:3)

您已将i声明为double,然后尝试将其用作(整数)数组索引。我想你想要double currentDiff = (lookingFor-arr[row][0]);

答案 1 :(得分:2)

您的算法中至少有一个错误,例如:

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

要获得最接近的匹配,您应该在此处使用差异的绝对值。否则,您很可能最终总是“匹配”最后一行(具有最高值),因为这将在上面的表达式中给出最小的否定结果。

(并且,正如其他人提到的那样,你应该使用int来索引数组。)

总体而言,您的方法非常低级且易碎。您最好为此作业使用NavigableMap实施,例如TreeMap,其中键是行中的第一个元素,值为List,其中包含其余数字每行,例如类似的东西:

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

答案 2 :(得分:0)

arr[i]要求i是数组的整数索引,但您将i声明为double

我认为你想要arr[row],即double currentDiff = (lookingFor-arr[row][0]);

答案 3 :(得分:0)

您正尝试在索引i处访问您的数组:arr[i][0]但我是双倍的。 我认为你应该学习面向对象编程和面向对象的设计,这将使它更容易。