#java
#java
Вопрос:
У меня есть вопрос о возврате позиции индекса наименьшего числа в массиве. Я выбрал 3 ответа из 5, которые я предоставил ниже. Я думаю, что один из них может быть правильным. Однако я не очень хорошо понимаю код, поэтому я ищу объяснение, как они работают.
A
public int min(int[] a) {
int min = 0;
for (int i = 1; i < a.length; i ) {
if (a[i] < a[min]) {
min = i;
}
}
return a[i];
}
B
public int min(int[] a) {
int min = 0;
for (int i = 1; i < a.length; i ) {
if (a[i] < a[min]) {
min = i;
}
}
return i;
}
C
public int min(int[] a) {
int min = 0;
for (int i = 1; i < a.length; i ) {
if (a[i] < a[min]) {
min = i;
}
}
return min;
}
Комментарии:
1. «Я предоставил 3 ответа ниже, которые, я думаю, они, возможно, верны» и почему они должны быть верными? Первые два даже не компилируются правильно (за исключением очевидной
,
опечатки вint i = 1; i < a.length, i
). И то, что они делают, можно легко протестировать. Вы пробовали их тестировать?2. Нет, у меня нет. Я только пытался отследить код, чтобы понять код. Я не могу понять код, поэтому мне нужна помощь
3. попробуйте запустить код с помощью инструкций print или используйте debugger, чтобы увидеть, что происходит.
4. Итак, я отредактировал вопрос. Эти 3 решения выше, я выбрал их из комбинации 5 решений, которые, как я думаю, могут быть верными, а могут и не быть, на мой взгляд.
5. Суть обучения программированию заключается в развитии того любопытства, которое заставляет вас пробовать что-то самостоятельно. Будьте готовы сесть и проводить эксперименты часами. В долгосрочной перспективе запрос объяснений, подобных тому, что вы делаете здесь, замедляет работу. Вместо этого: запустите свой код. Придумайте примеры массивов, затем попытайтесь мысленно «выполнить» каждый метод на листе бумаги. Затем запустите его и используйте операторы печати для просмотра промежуточных результатов. Не просите объяснений, когда можете легко найти ответы самостоятельно.
Ответ №1:
Это довольно просто.. вы ищете наименьший индекс. Представьте, что массив a
состоит из 3 элементов.
A
public int min(int[] a) {
int min = 0;
for (int i = 1; i < a.length, i ) {
if (a[i] < a[min]) {
min = i;
}
}
return a[i]; //returning value. Wrong!
//you are searching for the index, not value isnt' it?
}
B
public int min(int[] a) {
int min = 0;
for (int i = 1; i < a.length, i ) {
if (a[i] < a[min]) {
min = i;
}
}
return i; //returning i which only exist in for-loop scope. Wrong!
}
C
public int min(int[] a) { //assume a has 3 elements
int min = 0; //for storing smallest index
for (int i = 1; i < a.length, i ) { //loop index 1,2
if (a[i] < a[min]) { //if current array value < current smallest value
min = i; //store new found smallest index
}
}
return min; //returning min, the smallest index
}
Если min
не обновляется с помощью цикла, это означает, что индекс 0 (значение по умолчанию min) содержит наименьшее значение. Вариант C будет правильным ответом.
Комментарии:
1. Ваше замечание относительно AIOOBE неверно, имейте в виду, что условием прерывания является
<
, а не<=
. Мне также интересно, почему вы правильно жалуетесь на выход за рамкиi
в коде B, но не в коде A?2. Итак, вы думаете, что вместо i < a.length, i < = a.length было бы правильным ответом здесь?
3. @Nin Нет,
i <= a.length
неверно и вызовет упомянутое исключение user3437460.4. @Tom В MCQ мы идем путем исключения неправильных ответов, поскольку вариант A либо
i
выходит за рамки цикла for, либо не возвращает индекс, мы исключим его как неправильный вариант. Для AIOOBE вы правы.
Ответ №2:
Первый код выдаст ошибку (исключение Index out of bound), потому что в конце цикла for ваш «i » будет равен длине массива, и вы возвращаете [i], поэтому это решение совершенно неверно. Второй код вернет длину массива, поэтому это также неправильное решение. Третий введенный вами код вернет индекс наименьшего значения. Итак, решение правильное.
Комментарии:
1. Не могли бы вы подробнее рассказать о первом коде? Почему он возвращает значение наименьшего индекса? Я хочу понять код, а не просто решение
2. О, прости, Том. Да, вы правы насчет первого кода. Я думал, что первый код возвращает [min]