2014-11-03 192 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 2014-11-03 23:43:27

+0

如果有幾個長度爲10的字符串,它們都是最長的,會發生什麼?如果這是C#以下作品'animalNames.Aggregate(「」,(max,cur)=> max.Length> cur.Length?max:cur);' – Kevin 2014-11-03 23:47:53

+0

對不起,我發佈的問題,但這個程序是在java – Dee 2014-11-03 23:50:01

回答

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 2014-11-03 23:54:25

+0

肯定會! (: – Dee 2014-11-04 00:07:18

+0

謝謝你,繼續編程:) – kidnan1991 2014-11-04 00:08:53

-2

我認爲不應該有array.length();否則你會得到ArrayIndexOutOfBoundException,因爲我們不能使用length()作爲字符串數組,而是我們可以使用特定的字符串長度。

+0

這是什麼增加了這個問題?我相信以前的回覆已經涵蓋了你在這裏所說的內容。 – Prune 2016-09-21 16:49:11

-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 2017-07-28 03:01:01

-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

避免for循環我用數組的長度ArrayIndexOutOfBoundException, – 2018-01-20 20:30:33

+0

這樣的回答並沒有真正提供什麼樣的海報需要,這是一個什麼樣的錯他們的代碼,以及如何解決它的解釋。您需要包含的不僅僅是重寫的函數,而是有用的。 – 2018-01-20 20:38:56

相關問題