C# 编译时说使用了未赋值的局部变量

namespacetest_try{classProgram{staticvoidMain(string[]args){doublex,y,z;Console.Write... namespace test_try
{
class Program
{
static void Main(string[] args)
{
double x,y,z;
Console.WriteLine("请输入x");
x = double.Parse(Console.ReadLine());
Console.WriteLine("请输入y");
y = double.Parse(Console.ReadLine());
//计算z=根号下|x^2-y^2| 然后+x
try
{
z = Math.Sqrt(x * x - y * y);
}
catch
{
z = Math.Sqrt(y * y - x * x);
}
finally {
z = z + x;
}
Console.WriteLine(z);
Console.ReadLine();
}
}
}
=======================
以上是代码,按F5的时候说使用了未赋值的局部变量z
但是z不就是通过计算来赋值么
我是照着书抄的,本来是X,Y,Z都没赋值的,于是我加了两个输入的
的定义是float,但是会提示无法将双精度转换为单精度,于是改成double了,问题出在哪啊
展开
 我来答
昭聊IT
2013-07-06 · TA获得超过366个赞
知道小有建树答主
回答量:293
采纳率:100%
帮助的人:162万
展开全部
既然运行出现z未赋值,那么你就把z=0即可啦,在进行程序调试时应该按照运行时报错来进行相应的处理 所以在进行程序学习时重要的不是把程序谢谢,我们应该学会对程序进行调试,这在以后进入公司后公司所看重的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
清水栞
2013-07-06 · TA获得超过1547个赞
知道小有建树答主
回答量:1538
采纳率:50%
帮助的人:984万
展开全部
在finally里,z=z+x这里的z是未被初始你给的

声明的时候用
double x;
double y;
double z=0;
就可以了
追问
改了以后有这么个问题

我X输2,Y输1能有结果,是3.几
X输1,Y输2就提示非数字,我没设置这个提示啊,那个try是干嘛的啊,出错了不是该按catch来么
追答
try 尝试该部分代码
当有错误时,进入catch
无论有没有发生错误,最终都会进入finally
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wangpaishi
2013-07-06 · TA获得超过570个赞
知道小有建树答主
回答量:932
采纳率:52%
帮助的人:760万
展开全部
难道是
finally {
z = z + x;
}
中的第二个z???

你把这个z改成常量看看,还提示用了未赋值的局部变量z不

如果不提示,就是这个的问题
提示,就是其他地方z的问题
更多追问追答
追问
是这一个,但是把这个改了不就不是原来的计算了么

后来我就在前面先给z赋个值0,再试试,就出现下面的奇葩问题了

我X输2,Y输1能有结果,是3.几
X输1,Y输2就提示非数字,我没设置这个提示啊,那个try是干嘛的啊,出错了不是该按catch来么
追答
double.Parse

提示的吧

你可以打断点看看有没有执行到catch里面
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
HelloWorld5521
2013-07-06 · 超过16用户采纳过TA的回答
知道答主
回答量:102
采纳率:0%
帮助的人:32.6万
展开全部
为负值也就是在函数方法内的变量。 方法外的系统会给它默认空值,int double类型的为0
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友cfff287b8
2013-07-06 · TA获得超过321个赞
知道小有建树答主
回答量:632
采纳率:0%
帮助的人:242万
展开全部
提几点忠告:
1、书,不可不信,不可全信,拿到书先找找勘误表。
2、catch{}中最好只放提示信息,别放代码,可放到try{}中判断。
3、既然考虑到了可能会异常,那么z = z + x;中就别把z当已知数。否则先赋值。这句同样也应放到try{}中。finally{}中一般只放扫尾清理工作。
更多追问追答
追问
哦哦,好吧,因为还是初学,所以还是要看书的
你能帮我看看这个问题么
就是我先给z赋个0值,程序就可以正确运行了
如果x比y大的话就没问题
但是X比Y小的时候比如X=1,Y=2的时候就会提示非数字
然后打断调试,发现try里计算z得空值后就直接跳到finally了,而不是去catch
这是什么情况啊
追答
try
{
if (x>=y)
z = Math.Sqrt(x * x - y * y);
else
z = Math.Sqrt(y * y - x * x);
z = z + x;
}
catch(){}
finally
{}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式