0

该方法的目的是遍历一个名为 grid[][] 的二维整数数组,并根据最大值和最小值将整数转换为 100 到 250 之间的较小范围(原来的最小值变为 100,原来的最大值变为 250,并分别计算其间的一切)。调用此方法时,会发生除以零 ArithmeticException。

显然我在这里犯了一些逻辑错误......我只是没有看到修复。任何人都可以帮忙吗?

public int greenValues(int arrayVal) {  

    int max = 0;
    int min = 0;
    int colorValue = 0;
    int temp;

    for (int i = 0; i < grid.length; i++) {  // finds maximum and minimum numbers in file 
        for (int j = 0; j < grid.length; j++) {  
            if (max < grid[i][j]) {
                max = grid[i][j];   
            }
            if (min > grid[i][j]) { 
                min = grid[i][j];
            }
        }
    }

        int arrayRange = (max-min); // arrayVal, arrayRange, and max and min are 0
        temp = (((arrayVal-min) * COLOR_RANGE) / arrayRange) + 100;    // map values to range of 100 - 250
        colorValue = temp;
        return colorValue;
    }
4

2 回答 2

2

这条线是生产的罪魁祸首ArithmaticExcpetion

temp = (((arrayVal-min) * COLOR_RANGE) / arrayRange) + 100;

您的计算arrayRange是动态的,因为您不知道该值何时为 0。因此您可以用try catch块包装这一行以进行一些异常处理。

于 2015-04-25T18:37:40.793 回答
1

Dilip 的解决方案非常完美。或者,您也可以添加一个条件语句,仅在 arrayRange 不为 0 时通过,如果为 0,则执行其他操作。但每次计算 arrayRange 时执行条件语句会增加开销。

于 2015-04-25T20:03:29.057 回答