Метод bool и выходной параметр

Итак, у меня есть этот код

//in the Search class
public bool LinearSearchEx (int target, int[] array, out int number)
{
    number = 0;

    for (int i = 0; i < array.Length; i++)
    {

        if (target == array[i])
        {
            number += 1;
            return true;

        }
    }
    return false;
}

Я хочу, чтобы метод увеличивал числовой параметр каждый раз, когда он проверяет, найдено ли число в массиве. Так я назвал его в main.

Search s = new Search();
int num = 0;
int [] numsarr = new int[10] { 5, 4, 3, 6, 7, 2, 13, 34, 56, 23 };
int value = 6;
Console.WriteLine("num is {0}", num);
if(s.LinearSearchEx(value, numsarr, out num) == true)
{
    Console.WriteLine("Found it");
    Console.WriteLine("Out num is {0}", num);
}
else
{
    Console.WriteLine("Sorry not found");
    Console.WriteLine("Out num is {0}", num);

}

Я не уверен, где увеличить число out в моем методе, потому что способ, которым я имею это, теперь только увеличивает 1 и больше ничего. Если значение не найдено, следует распечатать длину всего массива. Есть ли приращение в двух местах в моем массиве? Спасибо, совсем новый для кодирования

2 ответа

Решение

Вы увеличиваете свой "номер" только тогда, когда предмет найден. Таким образом, "число" всегда 0 или 1 для вас. Похоже, вы хотите, чтобы "число" представляло место в вашем массиве, где оно было найдено. Как это:

public bool LinearSearchEx (int target, int[] array, out int number)
{
    number = 0;

    for (int i = 0; i < array.Length; i++)
    {
        number = i + 1;
        if (target == array[i])
        {
            return true;

        }
    }
    return false;
}

Выше будет возвращать длину массива, если он не найден. Если он найден, он вернет место в массиве.

Один простой способ сделать это - сделать ваш метод похожим на Java indexOf ( документы). Вместо того, чтобы возвращать логическое значение из вашего метода, вы можете вернуть счетчик и вернуть -1, если элемент не найден. Как это:

//in the Search class
public int LinearSearchEx (int target, int[] array)
{    
    for (int i = 0; i < array.Length; i++)
    {

        if (target == array[i])
        {
            return i + 1;
        }
    }
    return -1;
}

Тогда используйте это:

Search s = new Search();
int num = 0;
int [] numsarr = new int[10] { 5, 4, 3, 6, 7, 2, 13, 34, 56, 23 };
int value = 6;
Console.WriteLine("num is {0}", num);

int outNum = s.LinearSearchEx(value, numsarr)
if(outNum > 0)
{
    Console.WriteLine("Found it");
    Console.WriteLine("Out num is {0}", outNum);
}
else
{
    Console.WriteLine("Sorry not found");
    // Note that outnum will always be the array length if the number wasn't found
    Console.WriteLine("Out num is {0}", numsarr.Length);

}
Другие вопросы по тегам