问题描述
- 输出参数解一元二次方程
-
using System;
using System.Collections.Generic;
using System.Text;namespace 输出参数求解一元二次方程
{
class Program
{
public static void Root(int a, int b, int c, out double root1, out double root2)
{
double d = b * b - 4 * a * c;
double Sqrt = Math.Sqrt(d);
if (d > 0)
{
root1 = (-b + Sqrt) /( 2 * a);
root2 = (-b - Sqrt) / (2 * a);
}
else if (d == 0)
{
root1 = root2 = -b / (2 * a);
}
else
Console.WriteLine("此方程无根");
}
static void Main(string[] args)
{
int a = 5, b = 6, c = 1;
double root1, root2;
Root (a, b, c, out root1, out root2);
Console.WriteLine("root1 :{0},root2:{1}", root1, root2);
}
}
}
错误提示为控制离开方法之前必须对out参数root1.root2赋值。
我已经赋值了啊,为什么还会提示要对输出参数赋值的错误?
解决方案
在开头加上
root1 = 0;
root2 = 0;
因为你虽然赋值了,但是赋值是写在if判断内的,不一定执行到。C#语言规定,必须把赋值写在可能程序能执行到的地方。
解决方案二:
必须把赋值写在可能程序能执行到的地方。
->
必须把赋值写在肯定程序能执行到的地方。
肯定的含义是指语法结构上的,比如
if (true)
root1 = xxx;
这个还是不算肯定能执行到,尽管if的条件永远为真。