在下面的代码中为什么我不能在最后一行使用*和+?并且解决方法是什么?谢谢
private void 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);
}
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;
bigzarb(x, w) *( 10 ^ m) +(bigzarb(x,w)+bigzarb(w,y))*10^m +bigzarb(y,z);///compiler gives error operator "*"and"+" cannot be applied to operands of type'void'and'int'
///and compiler gives error operator "*"and"+" cannot be applied to operands of type 'void' and 'void'
}
}
答案 0 :(得分:5)
嗯,这里有一些问题:
xor
鉴于您的方法没有返回任何内容,您认为将在bigzarb(x, w) *( 10 ^ m)
等表达式中使用哪些值?
答案 1 :(得分:1)
您的方法bigzarb
具有无效签名,您在计算中使用该签名。
答案 2 :(得分:1)
Jon Skeet已经回答了这个问题,但我会更明确地解释这一行上究竟发生了什么......
bigzarb(x, w) *( 10 ^ m) + (bigzarb(x,w)+bigzarb(w,y))*10^m +bigzarb(y,z);
让我们把它分成几个部分
第一个陈述是
bigzarb(x, w)
但正如你从Jon的回答中看到的那样 - 你没有从这个方法中返回一个值......
private void bigzarb(int u,int v)
现在让我们用它的实际值替换那个位,现在我们已经解释了它:
[void] *( 10 ^ m) + (bigzarb(x,w)+bigzarb(w,y))*10^m +bigzarb(y,z);
同样适用于所有其他对bigzarb的调用 - 所以让我们替换它们......
[void] * ( 10 ^ m) + ([void] + [void]) * 10 ^ m + [void];
所以你的问题是,为了使用数学运算符,你需要数字 - 但你没有数字,因为你的方法是无效的。
你可以改变你的方法来返回一个数字 - 但要注意递归...当你调用这个方法时,它会调用自己三次,每次调用都会导致另外三次调用该方法。不好!</ p>
答案 3 :(得分:0)
这是因为
rerturn函数类型gzarb(x,w)为void,因此你无法对void指针进行任何操作。
并且在最后一行中,您正在运行计算中使用gzarb的输出。