ArithmeticException деление на ноль... как исправить этот метод?
Цель этого метода состоит в том, чтобы перебрать двумерный массив целых чисел, называемый 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;
}
2 ответа
Эта линия является следствием производства ArithmaticExcpetion
,
temp = (((arrayVal-min) * COLOR_RANGE) / arrayRange) + 100;
ваш расчет arrayRange
динамически, так как вы не знаете, когда это значение будет равно 0. Таким образом, вы можете обернуть эту строку с try
catch
блок, чтобы сделать некоторую обработку исключений.
Решение от Дилипа идеально. Или вы также можете добавить условный оператор, который позволяет ему проходить только тогда, когда arrayRange не равен 0, и выполнять что-то еще, если он равен 0. Но это увеличивает накладные расходы, выполняя условный оператор каждый раз, когда вычисляется arrayRange.