C# 编译器错误:运算符"*&引用;及+&引用;无法应用

C# 编译器错误:运算符"*&引用;及+&引用;无法应用,c#,winforms,algorithm,C#,Winforms,Algorithm,我昨天问了这个问题,但没有得到很好的回答 在下面的代码中,为什么我不能在最后一行中使用*和+?解决方法是什么?谢谢 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

我昨天问了这个问题,但没有得到很好的回答

在下面的代码中,为什么我不能在最后一行中使用*和+?解决方法是什么?谢谢

    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'
        }


    }
private void bigzarb(intu,intv)
{
双n;
int x=0;
int-y;
int w=0;
intz;
字符串[]i=textBox7.Text.Split(',');
int[]nums=新的int[i.Length];
用于(int计数器=0;计数器=第二位数)
{
n=第一位数字;
}
其他的
{
n=第二位数;
}
如果(u==0 | | v==0)
{
MessageBox.Show(“乘法为0”);
}
字符串阈值=textBox9.Text;
int intthreshold=Convert.ToInt32(阈值);
int intn=转换为32(n);

如果(intn好的,这里有一些错误:

  • 您试图使用调用方法的结果,但该方法没有返回值…因此没有可乘法的结果。这就是编译器所抱怨的
  • 我怀疑您认为^1执行“幂”运算-它实际上是一个按位
    xor
  • 你的最终陈述实际上与计算结果没有任何关系

假设您的方法不返回任何内容,那么您认为在表达式中会使用哪些值,例如
bigzarb(x,w)*(10^m)

嗯,这里有一些错误:

  • 您试图使用调用方法的结果,但该方法没有返回值…因此没有可乘法的结果。这就是编译器所抱怨的
  • 我怀疑您认为^1执行“幂”运算-它实际上是一个按位
    xor
  • 你的最终陈述实际上与计算结果没有任何关系

假设您的方法不返回任何内容,您认为在诸如
bigzarb(x,w)*(10^m)之类的表达式中会使用哪些值

你的方法
bigzarb
有一个无效签名,你在计算中使用它。

你的方法
bigzarb
有一个无效签名,你在计算中使用它。

这是因为

函数gzarb(x,w)的重新返回类型为void,因此不能对void指针执行任何操作

在最后一行中,在运行计算中使用gzarb的输出。

这是因为

函数gzarb(x,w)的重新返回类型为void,因此不能对void指针执行任何操作


在最后一行中,您在运行计算中使用了gzarb的输出。

Jon Skeet已经回答了这个问题,但我想我应该更明确地解释这一行上发生了什么

bigzarb(x, w) *( 10 ^ m) + (bigzarb(x,w)+bigzarb(w,y))*10^m +bigzarb(y,z);
让我们把它分成几个部分

第一句话是

bigzarb(x, w)
但是,正如您将从Jon的回答中看到的,您并没有从这个方法返回值

私有void bigzarb(内部u,内部v)

现在让我们用它的实际值替换该位,现在我们已经解释了它:

[void] *( 10 ^ m) + (bigzarb(x,w)+bigzarb(w,y))*10^m +bigzarb(y,z);
对bigzarb的所有其他调用也是如此-所以让我们也替换这些调用

[void] * ( 10 ^ m) + ([void] + [void]) * 10 ^ m + [void];
所以你的问题是,为了使用数学运算符,两边都需要数字——但你没有数字,因为你的方法是无效的


您可以更改您的方法以返回一个数字,但要注意递归……当您调用此方法时,它会调用自身三次,每次调用都会导致对该方法的另外三次调用。不太好!

Jon Skeet回答了这个问题,但我想我会更明确地解释到底发生了什么行

bigzarb(x, w) *( 10 ^ m) + (bigzarb(x,w)+bigzarb(w,y))*10^m +bigzarb(y,z);
让我们把它分成几个部分

第一句话是

bigzarb(x, w)
但是,正如您将从Jon的回答中看到的,您并没有从这个方法返回值

私有void bigzarb(内部u,内部v)

现在让我们用它的实际值替换该位,现在我们已经解释了它:

[void] *( 10 ^ m) + (bigzarb(x,w)+bigzarb(w,y))*10^m +bigzarb(y,z);
对bigzarb的所有其他调用也是如此-所以让我们也替换这些调用

[void] * ( 10 ^ m) + ([void] + [void]) * 10 ^ m + [void];
所以你的问题是,为了使用数学运算符,两边都需要数字——但你没有数字,因为你的方法是无效的


您可以更改您的方法以返回一个数字-但要注意递归…当您调用此方法时,它会调用自身三次,每次调用都会导致对该方法的进一步三次调用。这不好!

它不是“空指针”-我认为将指针引入图片中会带来更多的混乱,而不是帮助。这不是一个错误“空指针”也不是。它根本不是任何类型的指针。它不是“空指针”-我认为将指针引入图片会让人困惑,而不是帮助。它也不是“空指针”。它根本不是任何类型的指针。谢谢,我想^是权力,权力的象征是什么?在bigzarb(x,w)中我想用x替换u的值,用w替换v的值,然后乘以10^m,我该怎么做呢?thanks@Arash您可以使用Math.Power函数。@arash:没有Power的符号-而是使用
Math.Pow
。不过,您仍然没有任何意义-在表达式中使用
bigzarb(x,w)
意味着“调用
bigzarb
方法,并将其结果用于剩余的计算“-但是,
bigzard
没有结果,因为它是无效的。你想乘什么值?谢谢师父,我明白了,现在我用return实现了,我有一个问题,我会问其他问题,谢谢这么多hanks,我想^是权力,权力的象征是什么?在bigzarb(x,w)中,我想用xa替换u的值