我在访问数组中的值时遇到问题,目的是从我试图获得最接近匹配的值中减去数组第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栏。
我希望这可以帮助某人
答案 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]
但我是双倍的。
我认为你应该学习面向对象编程和面向对象的设计,这将使它更容易。