比较数组

时间:2012-06-14 02:23:49

标签: c#

我的代码有问题。我正在教自己c#,本章的挑战之一是提示用户输入10个数字,将它们存储在一个数组中,而不是要求增加1个数字。然后程序会说出附加数字是否与数组中的一个数字相匹配。现在我在下面的内容确实有效,但前提是我输入一个小于10的比较数,这是数组的大小。

我不确定如何修复它。我不确定如何进行比较。我首先尝试了一个FOR循环,但是在循环中运行并显示了对所有10个数字的比较,所以你会获得9行No!和1行是!我休息了;它停止计算所有10,但如果我输入数字5进行比较,那么我会得到4行不!和1!是的!以下是我可以让它可靠地工作的唯一方法,但只要数字不超出数组的范围。

我可以看到为什么当数字大于10时我得到错误,我只是不知道用什么比较它但仍然允许用户输入任何有效的整数。任何帮助都会很棒!

        int[] myNum = new int[10];
        Console.WriteLine("Starting program ...");
        Console.WriteLine("Please enter 10 numbers.");

        for (int i = 0; i <= 9; ++i)
        {
            Console.Write("Number {0}: ", i + 1);
            myNum[i] = Int32.Parse(Console.ReadLine());
        }

        Console.WriteLine("Thank you.  You entered the numbers ");
        foreach (int i in myNum)
        {
            Console.Write("{0} ", i);
        }

        Console.WriteLine("");
        Console.Write("Please enter 1 additional number: ");
        int myChoice = Int32.Parse(Console.ReadLine());
        Console.WriteLine("Thank you.  You entered the number {0}.", myChoice);

        int compareArray = myNum[myChoice - 1];

        if (compareArray == myChoice)
        {
            Console.WriteLine("Yes!  The number {0} is equal to one of the numbers you previously entered.", myChoice);
        }
        else
        {
            Console.WriteLine("No!  The number {0} is not equal to any of the entered numbers.", myChoice);
        }

        Console.WriteLine("End program ...");

        Console.ReadLine();

4 个答案:

答案 0 :(得分:4)

你在正确的轨道上 - 你想在myNum中遍历数组并将每个元素与变量myChoice进行比较。如果您不想打印数组的每个元素是否匹配,请创建一个新变量并使用它来跟踪您是否找到了匹配项。然后在循环之后,您可以检查该变量并打印您的发现。您通常会使用bool变量 - 将其设置为false以启动,然后在找到匹配时为true。

bool foundMatch = false;
for (int i = 0; i < 10; i++) {
    if (myNum[i] == myChoice) {
        foundMatch = true;
    }
}
if (foundMatch) {
    Console.WriteLine("Yes!  The number {0} is equal to one of the numbers you previously entered.", myChoice);
}

答案 1 :(得分:3)

如果您包含System.Linq命名空间(或者如果您将myNum的类型更改为实现ICollection<T>的内容,例如List<T>),则可以使用myNum.Contains(myChoice)查看是否值myChoicemyNum中的某个值匹配。如果在数组中找到指定的值,array.Contains将返回true的布尔值,如果不是,则返回false

您可以更新代码以使用它:

   //int compareArray = myNum[myChoice - 1]; // This line is no longer needed

    if (myNum.Contains(myChoice))
    {
        Console.WriteLine("Yes!  The number {0} is equal to one of the numbers you previously entered.", myChoice);
    }
    else
    {
        Console.WriteLine("No!  The number {0} is not equal to any of the entered numbers.", myChoice);
    }

答案 2 :(得分:1)

如果您正在寻找明确在1到10之间的数字,那么在使用之前

int compareArray = myNum[myChoice - 1];

检查它是否超过10的值。例如:

while(myChoice > 10)
{
    Console.Write("Please choose a number less than or equal to 10: ");
    myChoice = Int32.Parse(Console.ReadLine());
}

将其放入while循环而不是if标记的好处意味着,当用户输入另一个数字时,myChoice的值将被重写,并与之进行比较。如果他们输入的数字超过10,它将继续响应Please choose a number less than or equal to 10.,直到他们输入的数字低于或等于10:“那么,你的程序将继续。

但是,如果要将其与数组进行比较,而不是进行固定数字比较,请考虑以下while循环:

while(myChoice > myNum.Length)
{
    Console.Write("Please choose a number less than or equal to {0}: ", myNum.Length);
    myChoice = Int32.Parse(Console.ReadLine());
}

这适用于任何大小的数组,无需更改while循环内容。通过使用此系统,您可以确保不会获得IndexOutOfBounds异常,只要在将其用作索引时减去1即可。

答案 3 :(得分:0)

您希望比较最终的第11个值并尝试确定它是否包含10个先前条目的数组?

尝试:

for(int i = 0; i < array.length - 1; i++;)
{
    If(array[i] == input)
        return true;
}

 return false;

你应该能够弄清楚如何完全实现这一点,因为你想把它作为一个练习。

编辑:如果有人想要检查或以正确的语法完成它,请继续。我在手机上发布了这个粗略的轮廓。