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了,问题出在哪啊 展开
{
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了,问题出在哪啊 展开
5个回答
展开全部
既然运行出现z未赋值,那么你就把z=0即可啦,在进行程序调试时应该按照运行时报错来进行相应的处理 所以在进行程序学习时重要的不是把程序谢谢,我们应该学会对程序进行调试,这在以后进入公司后公司所看重的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在finally里,z=z+x这里的z是未被初始你给的
声明的时候用
double x;
double y;
double z=0;
就可以了
声明的时候用
double x;
double y;
double z=0;
就可以了
追问
改了以后有这么个问题
我X输2,Y输1能有结果,是3.几
X输1,Y输2就提示非数字,我没设置这个提示啊,那个try是干嘛的啊,出错了不是该按catch来么
追答
try 尝试该部分代码
当有错误时,进入catch
无论有没有发生错误,最终都会进入finally
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
难道是
finally {
z = z + x;
}
中的第二个z???
你把这个z改成常量看看,还提示用了未赋值的局部变量z不
如果不提示,就是这个的问题
提示,就是其他地方z的问题
finally {
z = z + x;
}
中的第二个z???
你把这个z改成常量看看,还提示用了未赋值的局部变量z不
如果不提示,就是这个的问题
提示,就是其他地方z的问题
更多追问追答
追问
是这一个,但是把这个改了不就不是原来的计算了么
后来我就在前面先给z赋个值0,再试试,就出现下面的奇葩问题了
我X输2,Y输1能有结果,是3.几
X输1,Y输2就提示非数字,我没设置这个提示啊,那个try是干嘛的啊,出错了不是该按catch来么
追答
double.Parse
提示的吧
你可以打断点看看有没有执行到catch里面
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
为负值也就是在函数方法内的变量。 方法外的系统会给它默认空值,int double类型的为0
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
提几点忠告:
1、书,不可不信,不可全信,拿到书先找找勘误表。
2、catch{}中最好只放提示信息,别放代码,可放到try{}中判断。
3、既然考虑到了可能会异常,那么z = z + x;中就别把z当已知数。否则先赋值。这句同样也应放到try{}中。finally{}中一般只放扫尾清理工作。
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
{}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询