2015-03-11 3 views
-3

Я получаю эту ошибку, в то время как я компиляции моей программыByte ошибка рекурсии

Argument 1: cannot convert from 'byte' to 'byte[]' 

Мой исходный код:

static byte[] recursivite(byte[] n) 
     { 
      n = new byte[4] { 0, 0, 0, 0 }; 
      byte[] myArray = new byte[4] {0, 0, 0, 0}; 

      for (int i = 0; i < myArray.Length; ++i) 
      { 
       if (n[i] == 0x01) 
        myArray[i] = 0x01; 
       else 
        myArray[i] = recursivite(n[i]); 
      } 
      return myArray; 
     } 
+1

И вы подумали, что это лучшее место, где можно запросить ошибки во время компиляции? – EZI

ответ

0

n является массив, поэтому очевидно, n[i] простой байт (а не массив).

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

myArray[i] = recursivite(new byte[1]() {n[i] }); 

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

Рекурсия обычно полезна только для вложенных (обычно рекурсивно) коллекций. Это не то, что у вас здесь.

0

Каково ваше желаемое функциональное поведение этого метода? Код не имеет смысла. Вы передаете параметр, но полностью игнорируете его значения. Вы перебрать один массив, но доступ к другим - если оба массива имеют одинаковую длину и т.д. Если все это было правильно, следующий код будет избежать ошибки компилятора и работать гладко:

static byte[] Recursivite(byte[] n) 
{ 
    byte[] n = new byte[4] { 0, 0, 0, 0 }; 
    byte[] myArray = new byte[4] {0, 0, 0, 0}; 
    for (int i = 0; i < myArray.Length; ++i) 
    { 
     if (n[i] == 0x01) 
      myArray[i] = 0x01; 
     else 
      myArray[i] = recursivite(null); // parameter are not needed anyway 
    } 

    return myArray; 
} 

Теперь позвольте мне упростить, что : Параметр избыточен, поэтому удалите его. Кроме того, n[i] всегда 0, то if оператор в цикле не имеет смысла, следовательно, вы можете удалить «если» заявление и, следовательно, объявление/определение n:

static byte[] Recursivite() 
{ 
    byte[] myArray = new byte[4] {0, 0, 0, 0}; 
    for (int i = 0; i < myArray.Length; ++i) 
    { 
     myArray[i] = recursivite(); 
    } 

    return myArray; 
} 

Если посмотреть в петлю, вы увидите, что вы вызываете бесконечный рекурсивный вызов. Другими словами: решение проблемы компилятора не поможет, потому что остальная часть метода не работает в первую очередь.

Смежные вопросы