2014-11-03 7 views
1

Проблема в том, что я пытался это сделать, но мой метод проверки длины строки не работает; что я могу сделать, чтобы исправить это?Поиск самой длинной строки в массиве строк

public static void main(String[] args) { 
    String[] animalNames = {"cat", "rabbit", "horse", "goat", "rooster", "ooooooooooooooo"}; 
    String a= getLongestString(animalNames); 
    System.out.println(a); 
} 

public static String getLongestString(String []animalNames) { 
    // String animalNames[] = {"cat","chicken","horse","ooooooooo" }; 

    int j = 0; 
    for (j = 0; j <= animalNames.length; j++) { 
     if (animalNames[j].length() > animalNames[j + 1].length()) { 
       return (animalNames[j]); 
      } 
     } 
     return null; 
    } 

} 
+1

Вы только возвращая один больше, чем другой, который, безусловно, должен бросить ошибку, когда вы столкнулись с последним. (** 0. Правильно отформатируйте свой пост! **) 1. Сохраните длину и индекс первой строки. 2. Обновите оба, когда вы найдете более длинную строку. 3. Верните строку из самого длинного индекса. – usr2564301

+0

Что произойдет, если есть несколько строк с длиной 10 и они все самые длинные? Если это C#, то работает следующее: «animalNames.Aggregate (« », (max, cur) => max.Length> cur.Length? Max: cur);' – Kevin

+0

Извините за то, что я разместил вопрос, но эта программа находится в java – Dee

ответ

3

Здесь. 1. Вы используете j<= animalNames.length;?

  1. Вы сравниваете animalNames[j + 1]? -> Индекс ошибки из массива

  2. и вы возвращаетесь в первом случае условие return (animalNames[j]); -> неправильное значение

Хорошо, позвольте мне пояснить. Вы найдете самую длинную строку в массиве. Вы перебираете массив, затем сравниваете 2 элемента, а затем возвращаете более крупный. С вашим кодом он вернет кролика. Правильно?

Возможно, вы запутаетесь в процессе потока. Существует простой способ.

  1. Вы назначаете переменную для длины первого элемента массива: elementLength = array [0] .length; и значение для отслеживания индекса
  2. Вы перебираете массив Вы проверяете каждый элемент с этой переменной, если больше, чем повторно назначаете значение элемента и обновляете индекс.
  3. Конец цикла. у вас есть самая большая длина и индекс

Код:

int index = 0; 
int elementLength = array[0].length(); 
for(int i=1; i< array.length(); i++) { 
    if(array[i].length() > elementLength) { 
     index = i; elementLength = array[i].length(); 
    } 
} 
return array[index]; 

что это.

+0

спасибо, что сделал больше смысла !! – Dee

+0

уверенный будет !! (: – Dee

+0

спасибо, продолжайте программирование :) – kidnan1991

-2

Я думаю, что не должно быть array.length();, иначе вы будете получать ArrayIndexOutOfBoundException, потому что мы не можем использовать length() для массива строки, вместо этого мы можем использовать для определенной длины строки.

+0

Что это добавляет к вопросу? Я считаю, что предыдущие ответы уже охватывали то, что вы здесь говорите. – Prune

-1
public class LongestWord { 
    public static void main(String []args) 
    { 
     System.out.println("Please enter the string for finding longest word"); 
     Scanner sc1 = new Scanner(System.in); 
     String str = sc1.nextLine(), x=null; 
     String str2[] = str.split(" "); 

     x=str2[0]; 
     int i =0,j = 0; 
     for(i = 0; i < str2.length; i = j) 
     { 
      for(j =i+1; j < str2.length; j++) 
      { 
       if(x.length() < str2[j].length()) 
       { 
        x = str2[j]; 
        break; 
       } 
      } 
     } 
     System.out.println("the longest string is: " + x + " and it's length is: " + x.length()); 

    } 
} 
+1

Подумайте о том, чтобы добавить объяснение, почему этот ответ полезен. В противном случае вы рискуете получить его пометкой. – Jonathan

-2
public class Main { 

    public static void main(String[] args) { 
     String [] names = {"Greg", "Aleksandra", "Martha", "Oliwka"}; 

     String wynik = findLongestName(names); 
     System.out.println(wynik); 
    } 

    public static String findLongestName(String [] names){ 
     int size = names.length; 
     String longestName = names[0]; 

     for(int i = 0; i <= 3; i++){ 
      if(names[i].length() > longestName.length()){ 
      longestName = names[i]; 
     }} 

     return longestName; 
    } 
} 
+0

, чтобы избежать ArrayIndexOutOfBoundException в цикле for Я использовал длину этого массива, –

+0

Этот ответ на самом деле не дает то, что требует плакат, что объясняет, что не так с их кодом и как его исправить. Вам нужно включить больше, чем просто переписанную функцию. –

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