Код иногда возвращает Integer.MAX_VALUE. Не могу понять, почему - PullRequest
0 голосов
/ 01 ноября 2011

Я пытаюсь написать код, чтобы вернуть наименьшее количество монет, необходимое для составления данного числа. Входными данными для моего метода являются массив действительных монет и число, которое я пытаюсь сделать.

    public static int change(int[] d, int p) {
        int[] tempArray = new int[p + 1]; // tempArray to store set
                                            // of coins forming
                                            // answer
        for (int i = 1; i <= p; i++) { // cycling up to the wanted value
            int min = Integer.MAX_VALUE; // assigning current minimum number of
                                            // coins
            for (int value : d) {// cycling through possible values
                if (value <= i) {
                    if (1 + tempArray[i - value] < min) { // if current value is
                                                            // less than min
                        min = 1 + tempArray[i - value];// assign it
                    }
                }
            }
            tempArray[i] = min; // assign min value to array of coins
        }
        return tempArray[p];
    }

Это работает в большинстве случаев, однако, когда я заполняю следующее:

int[] test = {2,3,4};
System.out.println("answer = " + change(test, 6));

Ответ должен быть 2, верно? Но это печатает:

-2147483647

Что я пропустил?

1 Ответ

2 голосов
/ 01 ноября 2011

Поскольку во время первой итерации tempArray[i] = min; tempArray [i] назначается для MAX, а во время последующей итерации [s], min = 1 + tempArray[i - value]; будет пытаться увеличить MAX на единицу, что в основном сдвигает биты и образует отрицательный аналог ,

...