2017-01-29 4 views
-5

Этот код показывает null как выход. Скажите, пожалуйста, какая часть моего кода будет неправильной?Реверс массива строк без использования строковой функции

public class Compre { 
    public static void main(String[] args) { 
     String a="abcefgh"; 
     String ar[]=a.split(""); 
     String arr[]=new String[100]; 
     int j=0; 
     for(int i=a.length()-1;i<0;--i){ 
      arr[j]=ar[i]; 
     } 
     ++j; 
     System.out.println(arr[j]); 
    } 
} 
+1

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

+1

Что вы даже пытаетесь сделать? Почему массив инициализируется размером 100? Отклоните свой код, и вы заметите, что ++ j, вероятно, должно быть в другом месте. – qqilihq

+0

'i <0' должно быть' i> = 0'. – shmosel

ответ

1

Первое: Ваша проблема заключается в том, что вы никогда не войти в петлю.

инициализации I в a.length()-1 которое 6. И тогда ваш для условия цикла когда i<0; Таким образом, вы никогда не ставите никаких значений в arr, а arr[j] - null, потому что он не инициализирован.

Второй:++j должен находиться внутри цикла.

В-третьих: Когда вы печатаете значения в конце, вы должны напечатать arr [- j] (последнее значение).

Исправлен код:

public static void main(String[] args) { 

    String a="abcefgh"; 

    String ar[]=a.split(""); 
    String arr[]=new String[100]; 
    int j=0; 
    for(int i=a.length()-1; i>=0 ;--i){ // Your problem is here 
     arr[j]=ar[i]; 
     ++j; // And here 
    } 
    System.out.println(arr[--j]); // And here 

}

Это должно работать нормально.

+0

@himanshu попробуйте фиксированный код. –

+0

Это нормально работает – himanshu

+0

@himanshu Вы поняли, что случилось? :) –

2

Проблема заключается в цикл, изменить его на:

for(int i=a.length()-1;i>=0;--i){ 
     arr[j++]=ar[i]; 
    } 

А потом в arr вы отменили. Но попытка распечатать arr[j] бессмысленно, потому что это должно быть null, потому что вы просто увеличиваете j при последнем указателе своего string.

2

Есть некоторые проблемы с вашим кодом, я буду описывать все из них:

  1. нет необходимости использовать split метод, вы можете использовать charAt метод вместо этой проблемы

  2. вам Предполагалось, что length ar не более 100?если я вхожу a с длиной 101 или более размером вашей программой собирающегося неудачу, вы можете использовать следующий метод вместо:

    String arr[]=new String[a.length]; 
    
  3. нет никакой необходимости обр быть String, потому что сама String является array из char символов , так что вы можете использовать этот код вместо:

    char arr[]=new char[a.length]; 
    
  4. ваши петли condition является неправильно на первое, becuase длиной "abcdefg" равен 7, но вы сказали i<0, это неtrue, так что цикл не собирается начать, вы можете переписать i>=0 в состоянии вместо:

    for(int i=a.length()-1;i>=0;--i) 
    
  5. вы должны увеличить значение j внутри цикла, а не снаружи, что:

    int j=0; 
    for(int i=a.length()-1;i>=0;--i) 
    { 
        arr[j]=ar.charAt(i); 
        ++j; 
    } 
    

или использовать этот равного один вместо этого, я предпочитаю использовать это:

int j=0; 
for(int i=a.length()-1;i>=0;--i) 
    arr[j++]=ar.charAt(i); 

затем распечатайте перевернутый массив:

for(int i = 0 ; i < arr.length ; i++) 
    System.out.println(arr[i]); 
Смежные вопросы