2017-08-08 127 views
0
public class LongWord { 
    public static void main(String args[]) { 
     String text = "my brother is taller than [email protected] I always a short man,but smart than him"; 

     // Find the longest word in the String 
     String[] words = text.split("\\s"); 
     String longestWord = ""; 
     for (int i = 1; i < words.length; i++) { 
      int firstLen = words[i - 1].length(); 
      int secondLen = words[i].length(); 
      if (firstLen <= secondLen) { 
       longestWord = words[i]; 
      } 
     } 
     System.out 
       .println("===================================================\nLongest Word:::: \n"); 
     System.out.println(longestWord); 
    } 
} 

//这是查找语句中最长单词的示例程序。所以输出应该是“me @ 1233334”这个词。但我得到的是“人,但”字作为输出。任何人都可以请帮助我什么是错误的程序。字符串长度()比较不正常

+3

用钢笔执行你的算法,在peper,写在每一步中每个变量的值。你有一个基本的逻辑思想。 –

+0

特别关注你正在比较的单词的长度。 – GhostCat

+0

你可能想看看另一个名为StringTokenizer的java类。有了它,您可以指定使用哪些分隔符,如空格和逗号。 – Alan

回答

0

你的方法没有找到字符串数组最大的字符串。它查找字符串数组中的最后一个字符串,它比它之前的字符串大。

您的比较(firstLen <= secondLen)不会比较任何字符串与当前最长的字符串。主循环应该是:

String longestWord = words[0]; 
for(String word : words) { 
    if(word.length() > longestWord.length()){ 
    longestWord = word; 
    } 
} 

您还可以使用for(int i = 0; i < words.length(); i++)和使用words[i]代替(String word : words)word

0

决定最长单词的逻辑是错误的。

您正在比较一个“单词”(在这种情况下,单词是指以空格分隔的东西)与前一个单词,如果它更长,现在是最长的。

男人,但被选中,因为它只是比它的前一个字(短)更长。请注意,没有任何东西,但选择,因为之后没有任何单词比他们以前的单词长

0

你做错了。你是不是比较,如果secondLenlongestWord大,它实际上应该是:

longestWord = words[0]; 
for (int i = 1; i < words.length; i++) { 
    int longestLen = longestWord.length(); 
    int secondLen = words[i].length(); 
    if (longestLen <= secondLen) { 
     longestWord = words[i]; 
    } 
}