3

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

我不知道如何解决它。我不确定如何进行比较。我首先尝试了一个 FOR 循环,这种循环很有效,但是通过循环并显示了与所有 10 个数字的比较,所以你会得到 9 行否!和 1 行 Yes!。我休息一下;它停止计算所有 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

4 回答 4

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);
}
于 2012-06-14T02:39:30.777 回答
3

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

您可以更新代码以使用它,如下所示:

   //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);
    }
于 2012-06-14T02:36:19.527 回答
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。

于 2012-06-14T02:31:42.633 回答
0

您正在寻找比较最终的第 11 个值并试图确定它是否在 10 个先前条目的数组中?

尝试:

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

 return false;

您应该能够弄清楚如何完全自己实现这一点,因为您确实想将其作为练习来完成。

编辑:如果有人想检查或以正确的语法完成它,请继续。我通过电话发布了这个粗略的轮廓。

于 2012-06-14T02:42:34.130 回答