Метод 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);
}