2014-11-03 145 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

相关问题