由于询问了我的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);
}
}
答案 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;
}