Java - цикл for () и массивы - PullRequest
       1

Java - цикл for () и массивы

1 голос
/ 11 сентября 2011

Следующий вопрос из теста, который я провел ... Я запустил код на BlueJ и не понимаю, почему возвращаемое значение 5 ...

public int mystery(int[] myStuff, int num) {

    for (int k = myStuff.length - 1; k >= 0; k--) {
        if (myStuff[k] < num) {
            return k;
        }
    }

    return -1;
}

myStuff = 2, 4, 0, 1, -6, 3, 8, 7, 5

num = 4

В тесте я написал - 0. Почему 5? Я не понимаю!

Что является частью

`return -1`

Ответы [ 7 ]

2 голосов
/ 11 сентября 2011

Вы получаете 5, потому что это index первого элемента в массиве, значение которого меньше 4 (при запуске с последнего элемента и работе в направлении первого).Обратите внимание, что у вас есть:

return k;

... где k - индекс вашего массива.Если вы хотите получить значение по этому индексу, вы должны сделать:

return myStuff[k];

Вот простой пример, который показывает, что ваш результат на самом деле правильный: http://ideone.com/7byIY

И return -1; просто говорит «если ни один элемент не меньше указанного числа, верните значение -1, чтобы указать, что совпадение не найдено».Это не редкая практика (возвращать намеренно выбранное недействительное значение, чтобы указать, что результата нет).

2 голосов
/ 11 сентября 2011

Возвращает пять, потому что это индекс 3 во входном массиве, который является первым числом, строго меньшим, чем 4, начиная с конца вашего массива.

return -1; будет выполнено, если ни один из элементов в вашем массиве не удовлетворяет критериям "строго меньше, чем число".

1 голос
/ 11 сентября 2011

Эта функция просто ищет последнее значение в массиве, которое больше или равно num. Давайте вычислим проверку myStuff[k] < 4 для всех значений:

   0      1     2     3     4     5      6      7     8   // k
   2      4     0     1    -6     3      8      7     5   // myStuff[k]
true  false  true  true  true  true  false  false  false  // myStuff[k] < 4

Последний индекс, для которого myStuff[k] < 4 является истинным, очевидно, равен 5, так что это правильный ответ.

return -1 необходимо, чтобы функция возвращала значение, даже если все элементы myStuff больше чем num. Например, с num = -99 результат будет -1.

1 голос
/ 11 сентября 2011

Эта функция задает позицию последнего числа в первом аргументе, которая меньше, чем второй аргумент (или -1, если все числа больше, чем второй аргумент; -1 - специальное значение без шансов двусмысленности, потому что есть нет позиции -1).

Это число 3, а его позиция 5 (начиная с 0).

1 голос
/ 11 сентября 2011

Функция возвращает самый большой индекс в массиве, соответствующий значению меньше целевого.Это выполняется для произвольных массивов путем сканирования со спины и возврата первого индекса, соответствующего значению, меньшему, чем цель.В вашем примере 3 <4 по индексу 5, так что это правильный ответ.Если значения, меньшие цели, не найдены, -1 используется в качестве дозорного значения, чтобы указать, что алгоритму не удалось найти правильный ответ. </p>

0 голосов
/ 11 сентября 2011

загадка (myStuff = [2,4,0,1, -6,3,8,7,5], 4)

тогда начинается for

для (int k = 8; k> = 0; k--) if (myStuff [8] = 5 <4) - NO </p>

2-я итерация

k = 7, если (7 <4) - НЕТ </p>

... и так далее

k = 6, если (8 <4) - НЕТ </p>

k = 5, если (3 <4) - ДА, поэтому верните k = 5 </p>

Последняя часть означает: если myStuff не имеет значения

0 голосов
/ 11 сентября 2011

ваш return-1 ничего не значит для параметров, которые вы здесь передали.так как условие истинно для значения 3, оно возвращает значение k, которое является ничем иным, как 5 bt этим движением.это потому, что вы выполняете итерацию в обратном направлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...