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. Таким образом, вы можете обернуть эту строку с trycatch блок, чтобы сделать некоторую обработку исключений.

Решение от Дилипа идеально. Или вы также можете добавить условный оператор, который позволяет ему проходить только тогда, когда arrayRange не равен 0, и выполнять что-то еще, если он равен 0. Но это увеличивает накладные расходы, выполняя условный оператор каждый раз, когда вычисляется arrayRange.

Другие вопросы по тегам