我的代码有问题。我正在教自己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();
答案 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)
查看是否值myChoice
与myNum
中的某个值匹配。如果在数组中找到指定的值,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;
你应该能够弄清楚如何完全实现这一点,因为你想把它作为一个练习。
编辑:如果有人想要检查或以正确的语法完成它,请继续。我在手机上发布了这个粗略的轮廓。