C#中的返回问题

时间:2010-12-20 08:41:22

标签: c# winforms algorithm

由于询问了我的last question,我已将代码更改为使用return。我总是遇到这个问题返回:我知道我应该使用return(我在下面的代码中注释),但我不知道应该如何定义它才能工作?谢谢你的帮助。

public double bigzarb(int u, int v)
{
    double n;
    int x=0;
    int y;
    int w=0;
    int z;
    string[] i = textBox7.Text.Split(',');
    int[] nums = new int[i.Length];
    for (int counter = 0; counter < i.Length; counter++)
    {
        nums[counter] = Convert.ToInt32(i[counter]);
    }

    u = nums[0];
    double firstdigits =Math.Floor(Math.Log10(u) + 1);
    v = nums[1];
    double seconddigits = Math.Floor(Math.Log10(v) + 1);
    if (firstdigits >= seconddigits)
    {
        n = firstdigits;
    }
    else
    {
        n = seconddigits;
    }
    if (u == 0 || v == 0)
    {
        MessageBox.Show("the Multiply is 0");
    }
    string threshold = textBox9.Text;
    int intthreshold = Convert.ToInt32(threshold);
    int intn = Convert.ToInt32(n);
    if (intn <= intthreshold)
    {
        double uv = u * v;
        string struv = uv.ToString();
        MessageBox.Show(struv);
        ///i know here should be a return but i dont know how to define it to work
    }
    else
    {
        int m = Convert.ToInt32(Math.Floor(n / 2));

        x = u % 10 ^ m;
        y = u / 10 ^ m;
        w = v % 10 ^ m;
        z = v / 10 ^ m;

        return  bigzarb(x, w) *Math.Pow(10,m) +(bigzarb(x,w)+bigzarb(w,y))*Math.Pow(10,m) +bigzarb(y,z);
    }
}

7 个答案:

答案 0 :(得分:2)

arash,你的问题不在于那个回报,你的问题是bigzarb()被声明为无效,这意味着它没有返回值但你在最后一行使用它bigzarb(x,w) * ....将给出你错了此外,由于您将bigzarb()声明为void,因此无法在其中返回值。 ^也不代表.net的强大功能,你应该使用Math.Power代替。

修改:您应该将方法从void bigzarb()更改为double bigzarb()并将其替换为Math.Power,然后重试以确定yit是否有效。

上次编辑:将方法返回类型从int更改为double,并将最后一行更改为:

return bigzarb(x, w) * Math.Pow(Convert.ToDouble(10), Convert.ToDouble(m)) + (bigzarb(x, w) + bigzarb(w, y)) * Math.Pow(Convert.ToDouble(10), Convert.ToDouble(m)) + bigzarb(y, z);

答案 1 :(得分:1)

如果您的方法被定义为“返回void”,则无法返回某个值。 所以将“void”改为“int”或“double”,无论你想要返回什么类型的值。

接下来的问题是你想在那个地方回归什么价值?归来那个。

顺便说一下:如果你真的不想返回一个值(永远!)那么“void”是正确的你应该只使用没有值的“return”(或者让方法运行到最后一行方法)。

答案 2 :(得分:1)

    public int bigzarb(int u, int v)
    {
        double n;
        int x = 0;
        int y;
        int w = 0;
        int z;
        string[] i = textBox1.Text.Split(',');
        int[] nums = new int[i.Length];
        for (int counter = 0; counter < i.Length; counter++)
        {
            nums[counter] = Convert.ToInt32(i[counter]);
        }

        u = nums[0];
        double firstdigits = Math.Floor(Math.Log10(u) + 1);
        v = nums[1];
        double seconddigits = Math.Floor(Math.Log10(v) + 1);
        if (firstdigits >= seconddigits)
        {
            n = firstdigits;

        }
        else
        {
            n = seconddigits;

        }
        if (u == 0 || v == 0)
        {
            MessageBox.Show("the Multiply is 0");
        }
        //string threshold = textBox9.Text;
        int intthreshold = Convert.ToInt32(textBox9.Text);//Edited by me
        int intn = Convert.ToInt32(n);
        if (intn <= intthreshold)
        {

            double uv = u * v;
            string struv = uv.ToString();
            MessageBox.Show(struv);
            ///i know i should use return here but how can i implement that to work?
        }
        else
        {
            int m = Convert.ToInt32(Math.Floor(n / 2));

            x = u % 10 ^ m;
            y = u / 10 ^ m;
            w = v % 10 ^ m;
            z = v / 10 ^ m;

            return bigzarb(x, w) * (10 ^ m) + (bigzarb(x, w) + bigzarb(w, y)) * 10 ^ m + bigzarb(y, z);
        }
        return 0;
        }

答案 3 :(得分:1)

我的建议是构建代码,提取一些代码以使用有意义的名称分隔函数,并将变量重命名为sometging有意义。这样可以更容易阅读,理解并在代码中获得更好的“流程”。此外,您应该用实际问题补充您的文本。尝试在if代码块中插入一个额外的return语句,可以使用多个return语句。

if(logic check)
{
     return something;
}
else
{
     return something else;
}

你需要在两个语句中返回,或者在if-else块之后返回一个,否则你会得到一些编译错误,说不是所有的代码路径都返回一个结果或类似的东西。

答案 4 :(得分:1)

你只有一次回复,这是一次递归通话(自称) - &gt; 堆栈溢出!你需要在没有递归调用的情况下返回某个地方

答案 5 :(得分:0)

它是一个令人困惑的一个。因为你的函数包含Void作为返回类型

答案 6 :(得分:0)

声明整数变量以返回值 例如:

 public int func()
{
 int l_nData  = 0;

if(condition)
{
  l_nData = 1;
  return l_nData;
}
else
{
  l_nData = 2;
  return l_nData;
 }
 return l_nData;

}