C# 使用了未赋值的局部变量

char[,] bomb = new char[10, 10];
Console.WriteLine("input:");
int count = Convert.ToInt32(Console.ReadLine());
int i;
int j;
Random r = new Random();
for (int c = 0; c < count; c++)
{
i = r.Next(10);
j = r.Next(10);

if (bomb[i, j] == '*')
c--;
else
bomb[i, j] = '*';
}

for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; j++)
{
if (bomb[i, j] != '*')
{
bomb[i, j] = checkbomb2(i, j);
}
Console.Write(bomb[i, j] + " ");
}

Console.WriteLine();

}

}

static char checkbomb2(int a, int b)
{
char[,] bomb = new char[10, 10];
char A;
int num = 0;

for (int i = a - 1; i < a + 1; i++)
{
if ((a - 1) == -1 || (a + 1) == 10)
continue;
else
{
for (int n = b - 1; n < b + 1; n++)
{
if ((b - 1) == -1 || (b + 1) == 10)
continue;
else
{
if (bomb[i, n] == '*')
{
num++;
A = Convert.ToChar(num.ToString());
}
}
}
}
}
return (A);

初学C#,老师让编了个扫雷的基础程序,为什么子函数里返回值A的时候提示未赋值的局部变量A。我尝试在子函数里给定义A一个空值好像也没用。请大神帮看看!
结尾少了个},补一下。

首先,为了防止这种不必要的错误,初始化变量的时候,最好先赋个默认值,比如char A='';

其次,这里会报错是这样的。
你的变量A在for (int i = a - 1; i < a + 1; i++)循环体出现之前声明了,但是还没有初始化,此时直接调用A的话是会报错的,这个需要明白。然后return(A)出现在for (int i = a - 1; i < a + 1; i++)循环体外边,正常逻辑,变量A在循环体里边会被初始化,然后走return(A)是OK的。
但是编译器会考虑你的程式假如a和i的初值导致逻辑不走循环体的情况,这时候等于说是char A='';然后直接不走循环走return(A),此时就会出错。追问

char A='';之后会提示出错“空字符”

追答

刚查了资料,是我之前的理解错了。互相学习了。
char是字符类型,char A='';本身就会编译报错的。因为根本就没有''这个字符···
char可以存放一个是16位的Unicode字符,’a‘、’b‘···'1'、’2‘等等都是合法的,其它类似’\0‘这类的字符也是允许的,而’123‘、’abc‘之类的表示已经超出了字符表示的长度,是不行的。实际上'\0'表示的就是我们理解的空字符,而不是直接使用'',’‘应该是不被允许的。
回到你的问题上,之前的报错是因为char对象没有初始化,需要赋初值,char A=’‘;是错误写法,改成char A='\0';试试。

温馨提示:内容为网友见解,仅供参考
第1个回答  2019-06-10
你的数组没有初始化
int[]
num;需要改成int[]
num=new
int[1000];这种格式(因为不清楚会有多少个数字,所以暂定1000)
同样后面的for
(int
i
=
0;
i
<=
num.Length-1;
i
+=5)
就需要改成
for
(int
i
=
0;
i
<k;
i
+=5)
实际上这种不定长的数据并不适合用数组的,可以用诸如
List<int>
list=new
List<int>();
然后在
if
(i
%
7
==
0)的时候就可以用
list.Add(i);
第2个回答  2014-08-13
string name1 = “”;
string name2 = “”;
int age1 = 0;
int age2 = 0;
定义变量是直接初始化,养成好的习惯可以减少很多不必要的错误。追问

char类型初始化是char A=‘’么?我这么做了之后还是有问题

第3个回答  2015-11-05
出错代码:
public string XMLStartPosion()
{
string path2;
XmlReader xr = XmlReader.Create(@"E:\单元项目\Explorer\Explorer\XMLPath.xml");
if (xr.Read())
{
if (xr.NodeType == XmlNodeType.Element)
{
path2 = (string)xr.Value;
Console.WriteLine(path2);
}
}
return path2;
}
在定义变量时进行初始化是个好习惯。
改错如下string path2="";
具体实例是使用XMLReader读取XML文件中存储的文件夹路径,此处只记载出错部分。
第4个回答  2014-08-13
改一下,给char A=‘’;看看
相似回答