ошибка компилятора: операторы "*" и "+" не могут быть применены - PullRequest
1 голос
/ 20 декабря 2010

я вчера задавал вопрос, как этот вопрос, но я не получил хорошего ответа об этом

в приведенном ниже коде, почему я не могу использовать * и + в последней строке? И как это решить? Спасибо

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


    }

Ответы [ 4 ]

5 голосов
/ 20 декабря 2010

Ну, здесь есть несколько вещей не так:

  • Вы пытаетесь использовать результаты вызова метода, но у этого метода нет возвращаемого значения ... поэтому нет результата для умножения. Это то, на что жалуется компилятор.
  • Я подозреваю, что вы думаете, что ^ выполняет операцию "power" - на самом деле она побитовая xor
  • Ваше окончательное утверждение фактически не делает ничего с результатами расчета

Учитывая, что ваш метод ничего не возвращает, как вы думаете, какие значения будут использоваться в выражении, таком как bigzarb(x, w) *( 10 ^ m)?

1 голос
/ 20 декабря 2010

Джон Скит ответил на этот вопрос, но я, хотя и хотел бы более четко объяснить, что именно происходит в этой строке ...

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

Давайте разбить ее на части

Первое утверждение:

bigzarb(x, w)

Но, как вы увидите из ответа Джона, вы не возвращаете значение из этого метода ...

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];

Итак, ваша проблема в том, чтобы использовать математические операторы, вам нужны числа на каждой стороне - но у вас нет чисел, потому что ваш метод недействителен.

Выможет изменить ваш метод, чтобы он возвращал число, но помните о рекурсии ... когда вы вызываете этот метод, он вызывает себя три раза, и каждый из этих вызовов приведет к еще трем вызовам метода.Не хорошо!

1 голос
/ 20 декабря 2010

Ваш метод bigzarb имеет подпись void, которую вы используете при вычислении.

0 голосов
/ 20 декабря 2010

это потому что

Повторите тип функции gzarb (x, w), void, поэтому вы не можете выполнять операции с указателем void.

и в последней строке вы используете вывод gzarb в расчете на ход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...