Цикл Java не работает

avatar
user7548189
1 июля 2021 в 17:52
56
5
1

Почему эта функция:

    public static int test(int[] a, int v)
    {
        for (int i = 0; i < a.length; i++)
        {
            if (a[i] == v)
                return I;
            else return -1;
        }
    }

не компилируется, учитывая a = {0,2,3,4} и v = 2?

Кажется, цикл должен запуститься и вернуть -1, так как первый элемент не v.

Источник
QBrute
1 июля 2021 в 17:57
3

Он не компилируется, потому что не все пути возвращают значение. Ничего не возвращается, если цикл for никогда не вводился.

Pshemo
1 июля 2021 в 18:13
2

Помимо основного вопроса, понимаете ли вы, что ваш цикл может повторяться только один раз, потому что в каждой ветви if вы возвращаете значение (которое останавливает выполнение метода, включая выполнение цикла)?

Ответы (5)

avatar
Ibrahim Diba
2 июля 2021 в 08:33
0

первый элемент не является V, поэтому программа по умолчанию будет использовать оператор else, где вы возвращаете -1, по сути, оператор return отменяет завершение, поэтому цикл будет выполняться только один раз

public static int test(int[] a, int v)
{
    for (int i = 0; i < a.length; i++)
    {
        if (a[i] == v)
            return i;
    }
     return -1;
}

Более приемлемый вариант — использовать условие возврата -1 вне цикла, который будет выполнен, если все элементы массива не совпадают v

avatar
8bit
1 июля 2021 в 18:26
0

самым простым решением было бы удалить цикл, так как return вызывается в первой итерации, даже если a[i] == v ложно. Таким образом, метод должен выглядеть так:

public static int test(int[] a, int v)
{
 if (a[0] == v)
   return a[0];
 else return -1;
}
Pshemo
1 июля 2021 в 18:43
0

Там еще i вернулось. Вероятно, это должно быть return 0;.

avatar
Taron Qalashyan
1 июля 2021 в 18:00
2

У вас должен быть оператор return для случая, если цикл For не повторяется ни разу. например если вы передаете пустой массив. Это не лучший способ реализовать вашу логику, но для вашей реализации вам нужно добавить возврат после цикла for, как этот.

Также вы, вероятно, захотите удалить ветку else, так как это приведет к возврату -1, если первый элемент массива не равен искомому элементу v, что полностью остановит выполнение метода test.

public static int test(int[] a, int v) {
  for (int i = 0; i < a.length; i++) {
    if (a[i] == v) {
      return i;
    } 
  }
  return -1;
}
Alan
1 июля 2021 в 18:21
0

Я думаю, вы имеете в виду «» будет повторять не даже один раз».

Pshemo
1 июля 2021 в 18:24
0

@Alan Алан Верно, исправлено (надеюсь).

avatar
Alan
1 июля 2021 в 17:59
2

Метод должен возвращать int, поскольку он был объявлен для этого.

Компилятор не может знать, что цикл for действительно будет выполняться, потому что ввод a может иметь длину 0. Поэтому он выдает ошибку, потому что если длина равна 0, цикл for никогда не будет выполняться.

Поместите оператор return после цикла for (вне его).

avatar
tomrlh
1 июля 2021 в 17:58
1

Вы пропустили оператор возврата метода. Попробуйте это:

public class MyClass {
    public static void main(String args[]) {
     System.out.println(MyClass.test(new int[]{0,2,3,4}, 2));
    }
    
    public static int test(int[] a, int v) {
        int result = 0;
        for (int i = 0; i < a.length; i++) {
            if (a[i] == v)
                result = i;
            else
                result = -1;
        }
        return result;
    }
}

Текущая демонстрация