C# 为什么我在C“编译器”中遇到这个错误;未分配局部变量“;
我得到以下错误。使用未分配的局部变量markduplicate。我不明白为什么?此程序在数组中查找重复项。我一直在想办法,我觉得我离得很近。谢谢你的帮助C# 为什么我在C“编译器”中遇到这个错误;未分配局部变量“;,c#,arrays,compiler-errors,duplicates,unassigned-variable,C#,Arrays,Compiler Errors,Duplicates,Unassigned Variable,我得到以下错误。使用未分配的局部变量markduplicate。我不明白为什么?此程序在数组中查找重复项。我一直在想办法,我觉得我离得很近。谢谢你的帮助 using System; class duplicate { static void Main() { const int Array_Size = 5; int [] number = new int [Array_Size]; int i; for ( i = 0; i < A
using System;
class duplicate
{
static void Main()
{
const int Array_Size = 5;
int [] number = new int [Array_Size];
int i;
for ( i = 0; i < Array_Size; i++)
{
Console.Write("Element " + i + ": ");
number[i] = Int32.Parse(Console.ReadLine());
if (number[i] < 9 || number[i] > 101)
{
Console.WriteLine("Enter Number between 10 - 100");
number[i] = Int32.Parse(Console.ReadLine());
}
}
bool markduplicate;
for (i = 0; i < Array_Size; i++)
{
for (int j = 0; j < Array_Size; j++)
{
if (i != j)
{
if (number[j] == number[i])
{
markduplicate = true;
}
}
if (markduplicate != true)
{
Console.WriteLine("Element " + i + " " + number[i]);
}
}
}
}
使用系统;
类副本
{
静态void Main()
{
常量int数组_Size=5;
int[]number=新的int[Array_Size];
int i;
对于(i=0;i101)
{
Console.WriteLine(“输入10-100之间的数字”);
number[i]=Int32.Parse(Console.ReadLine());
}
}
布尔马克;
对于(i=0;i
}这是因为C#的代码分析器检测到在对程序进行任何赋值之前引用标记Duplicate
的值时,程序中存在路径。具体来说,这将在嵌套循环的第一次迭代期间发生,当i
和j
都为零时:包含赋值的if(i!=j)
块将不执行,因此,markduplicate
的值将在下一个if
语句中检索
要解决此问题,请更改
bool markduplicate;
到
在声明中。您已经声明了布尔变量
markduplicate
,但是您没有给它一个初始值-编译器不知道它最初是真还是假
在这种情况下,很明显,您希望它最初为false,因此请将以下内容:
bool markduplicate = false;
现在将对其进行编译。编译器认为,如果(markduplicate!=true)行在设置
markduplicate
之前,您可以点击
如果您认为编译器是错误的,请在声明时给它一个值,例如bool markduplicate=true代码>。如果您分析并认为编译器是正确的,请相应地调整代码
另外:if(markduplicate!=true)
被认为是糟糕的风格。如果(!markduplicate)
则使用。在您的代码中,(i!=j)
在为真之前为假,因此您正在检查未分配给它的变量的值
您需要在markduplicate声明时为其指定一个值,或者需要确保对其值进行条件检查的任何路径都首先为其指定了一个值。您必须在声明中将markdefault
指定给true
或false
。否则,如果number[j]!=编号[i]
,则不会分配markdefault
,并且如果标记重复!=无法计算true
。因为不是所有通过循环的路径都将at值指定给markduplicate
。只需使用false
对其进行初始化即可。在进入循环之前,不会为markDuplicate赋值。给它赋一个初始值False,你就可以了。这是一个旁白,但是你声明i超出循环的范围有什么原因吗?另外,你可能想稍微修改一下你的循环。假设您有数字1、1和1。您将打印“元素0 1”两次,然后打印“元素1 1”两次,然后打印“元素2 1”两次。我在外部循环中声明markduplicate
,并在内部循环中设置markduplicate
后放置break
语句。我也会将打印移到外部循环,并更改if子句的含义。请您的问题提供您得到的确切错误消息,并用注释标记导致错误的行。你的面前就有这些具体的信息;如果您提供它,它会容易得多。:-)
bool markduplicate = false;