我有问题我想使用bool函数来创建搜索算法 这是我的代码
private bool IsEqual(int data1, int[] arr2){
bool find=false;
foreach(int data2 in arr2){
if(data1==data2){
find=true;
break;
}
}
return find;
}
这就是我调用函数
int data1=2;
int[] arr={1,2,3,4,5};
if(IsEqual(data1, arr)){
console.writeline("Find in index");
}
如果找到数字,我如何得到数组的索引?
注意:
我必须使用bool功能
我无法在bool函数中添加参数
我无法在参数中添加关键字,例如ref int data1
仅更改bool功能
我无法添加其他功能
答案 0 :(得分:1)
您可以返回index
。如果未找到则返回-1(而不是false)
答案 1 :(得分:1)
您必须自己维护计数,或切换为使用for(int i=...
循环:
int i = 0;
foreach(int data2 in arr2) {
if( data2 == data1 ) return i;
i++;
}
return -1;
答案 2 :(得分:1)
C#有一个ref参数的概念:https://msdn.microsoft.com/en-us/library/14akc2c7.aspx。
private bool IsEqual(ref int data1, int[] arr2) {
bool find=false;
for(int i = 0; i < arr2.Length; i++) {
if(data1==arr2[i]) {
find=true;
data1 = i;
break;
}
}
if(!find) {
data1 = -1;
}
return find;
}
这可以像这样调用
int data1=2;
int[] arr={5,4,3,2,1};
if(IsEqual(ref data1, arr)){
console.writeline("Find in index");
}
int index = data1;
答案 3 :(得分:0)
将an out
parameter与for
循环结合使用。与它一起玩here。 out
参数可让您保持返回bool
,并构建for
循环以跟踪数组索引。
using System;
public class Program
{
// this is your method
// using an out parameter and a for loop
// ignore the static keyword - it isn't important for the example
private static bool IsEqual(int data1, int[] arr2, out int index)
{
index = -1;
bool find = false;
for(int i = 0; i < arr2.Length; i++)
{
if (data1 == arr2[i])
{
find = true;
index = i;
break;
}
}
// you don't need to return the index
// the out parameter covers that for you
return find;
}
public static void Main()
{
// and this is i call the function
int data1 = 2;
int[] arr = { 1, 2, 3, 4, 5 };
int index;
if (IsEqual(data1, arr, out index))
{
Console.WriteLine("Find in index {0}", index);
}
}
}
答案 4 :(得分:0)
好的,鉴于您的奇怪约束,这里有一些代码可以找到您的int的索引,&#34;使用&#34;你的IsEqual
功能:
int data1=2;
int[] arr={1,2,3,4,5};
for (int ix = 0; ix < arr.Length; ix++) {
if(IsEqual(data1, new int[] { arr[ix] })) {
Console.WriteLine("Find in index {0}", ix);
break;
}
}
这是非常可怕的代码,但它可以做你想要的......