此方法的目的是迭代称为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;
}
答案 0 :(得分:2)
此行是产生ArithmaticExcpetion
的结果。
temp = (((arrayVal-min) * COLOR_RANGE) / arrayRange) + 100;
您动态计算arrayRange
,因为您不知道该值何时为0.因此您可以使用try
catch
块来包围此行以执行一些异常处理。
答案 1 :(得分:1)
Dilip的解决方案非常完美。或者你也可以添加一个条件语句,只有当arrayRange不是0时才会传递它。如果它是0则执行其他操作。但是每次计算arrayRange时执行条件语句都会增加开销。