В чем проблема с моим максимальным алгоритмом продукта - PullRequest
0 голосов
/ 04 февраля 2020

Вот код:

public static int MaxProduct(int... a){  // the max possible product from an array
    int i = 0;
    int j = 0;
    int m = 0;
    int n = a.length;
    while (i<n){
        j++;
        while(j<n ){
            if (a[i]*a[j] > m){
                m = a[i]*a[j];
                j++;
            }
        }
        i++;
    }
    return m;
}


System.out.println(MaxProduct(1,2,3,4,5));

Алгоритм работает должным образом (после проверки и составления таблицы отладчика). Для первого индекса массива он проверяет все возможные продукты и редактирует m соответственно от 1 до 5. И затем, когда j равен 5 a[j], понятно, что это выходит за пределы, поскольку в массиве всего 5 элементов

Затем я вижу ошибку arrayoutofbounds в отладчике рядом (опять же, это то, чего ожидает id), но вместо того, чтобы увеличивать i, а второй, пока l oop запускает цикл снова, a [i] остается равным 1, алгоритм завершает работу, и я получаю вывод 5

Как мне получить это на выходе 20 (4x5)

1 Ответ

2 голосов
/ 04 февраля 2020

Вам нужно сделать два изменения. Проверьте ниже 2 TODO.

public static int MaxProduct(int... a) {  // the max possible product from an array
    int i = 0;
    int j = 0;
    int m = 0;
    int n = a.length;
    while (i < n) {
        j = i + 1;  // TODO: 1
        while (j < n) {
            if (a[i] * a[j] > m) {
                m = a[i] * a[j];
            }
            j++; // TODO:2
        }
        i++;
    }
    return m;
}
...