bool 方法和 out 参数

bool method and out parameter

所以我有这个代码

//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);

}

我不确定在我的方法中在哪里增加输出数字,因为我现在的方式只增加 1,仅此而已。如果找不到该值,它应该打印出整个数组的长度。在我的数组中的两个地方递增吗?谢谢,对编码还很陌生

一个简单的方法就是使您的方法类似于 Java 的 indexOf (docs)。如果未找到该项目,则可以 return 计数和 return -1 而不是从您的方法中 returning 布尔值。像这样:

//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);

}

只有在找到该项目时,您才增加输出 'number'。所以 'number' 对你来说总是 0 或 1。 听起来您希望 'number' 代表数组中找到它的位置。像这样:

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;
}

以上将 return 数组的长度,如果没有找到的话。如果找到它将 return 数组中的位置。