2 qq 30137777 qq_30137777 于 2015.08.27 23:54 提问

输出参数解一元二次方程

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赋值。
我已经赋值了啊,为什么还会提示要对输出参数赋值的错误?

3个回答

caozhy
caozhy   Ds   Rxr 2015.08.28 07:18
已采纳

在开头加上
root1 = 0;
root2 = 0;

因为你虽然赋值了,但是赋值是写在if判断内的,不一定执行到。C#语言规定,必须把赋值写在可能程序能执行到的地方。

qq_30137777
qq_30137777 哦哦,好的,谢谢
大约 2 年之前 回复
caozhy
caozhy 回复c#: 在函数体内
大约 2 年之前 回复
qq_30137777
qq_30137777 但是输出参数不是不能初始化赋值么?
大约 2 年之前 回复
caozhy
caozhy   Ds   Rxr 2015.08.28 07:19

必须把赋值写在可能程序能执行到的地方。
->
必须把赋值写在肯定程序能执行到的地方。

肯定的含义是指语法结构上的,比如
if (true)
root1 = xxx;
这个还是不算肯定能执行到,尽管if的条件永远为真。

AAAwei1996
AAAwei1996   2017.01.15 12:00

既然是求根,那么你的参数不能有root1和root2,不然无法传递其值,除非他是有默认值的参数,如方法声明时
public static void Root(int a, int b, int c, out double root1=0.0, out double root2=0.0)
这样在传递参数时就不用给他俩传值了,或者直接不把root作为参数,而是在方法体内对其定义,如
public static void Root(int a, int b, int c)
以下是我针对这个题的解决方法。图片说明

Csdn user default icon
上传中...
上传图片
插入图片