2012-01-29 3 views
2

То, что я пытаюсь сделать, это превратить эту функцию C++ для Java:Неразрушающий удаление первого элемента массива?

void print(int x[], int l) 
{ 
    if (l != 0) { 
     cout << x[0] << ","; 
    print(x+1,l-1); 
    } 
} 

Это то, что я пытаюсь сделать, но это не будет работать:

void print(int x[]) 
{ 
    if (x.length != 0) { 
     cout << x[0] << ","; 
     print(x + 1); //<--- ERROR! 
    } 
} 

Кто-нибудь есть какие-либо идеи?

+0

Зачем вам это нужно рекурсивно? Или вы ...? –

+0

Просто пытаюсь выучить Java? Хотел посмотреть, смогу ли я сделать то же самое, что и на C++, задав этот вопрос. –

ответ

8

Java не имеет указателей так же, как C++. То есть вы не можете «переместить» указатель массива x дальше по массиву. То, что я хотел бы предложить пропускание начального индекса к вашей функции что-то вроде этого:

void print(int x[], int start) 
{ 
    if (start < x.length) { 
     if (start > 0) { 
      System.out.println(x[start] + ","); 
     } 
     print(x, start + 1); 
    } 
} 
+0

Спасибо! Это именно то, что мне нужно! –

+0

Почему, черт возьми, вы хотите сделать это рекурсивно? Пожалуйста, объясните, что для нас ... –

0

В Java, массивы имеют length свойства, так что вам даже не нужно идти через любого из этой ерунды:

void print(int[] x) 
{ 
    for (int i = 0; i < x.length; i++) 
     System.out.print(x[i] + ","); 
} 
+0

Это не прямой перевод кода. Обратите внимание, что в C & C++ вы можете просто использовать for-loop. И особенно в C++, скорее всего, вы будете использовать 'std :: vector', а не raw-массив. – Xeo

+0

На самом деле, в C++/C вы не можете определить длину массива программно, отсюда необходимость неуклюжих обходных решений, как в исходном посте. Это намного проще итеративно, когда у вас есть свойство length. –

+0

Параметр 'l' в коде C/C++ * является длиной, поэтому вы можете просто сделать для for (int i = 0; i Xeo

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