2015-04-06 75 views
0

我有一个ArrayList的字符串,我想在计算字母顺序后检索名字的第一个和最后一个结果。下面是我的代码片段:ArrayList检索第一个和最后一个结果没有排序ArrayList

ArrayList<String> list = new ArrayList<String>(20); 
    list.add("Charles Darwin"); 
    list.add("Albert Einstein"); 
    list.add("Issac Newton"); 
    list.add("Tony Hoare"); 
    list.add("Grace Hopper"); 
    list.add("Edgar Dijkstra"); 
    list.add("Ada Lovelace"); 
    list.add("Charles Babbage"); 
    list.add("Stephen Hawking"); 

String biggest = ""; 
      String smallest = ""; 

      for (int i = 0; i < list.size(); i++) { 
       String first = list.get(i); 
       for (int j = 0; j < list.size(); j++) { 
        String second = list.get(j); 
        if (!first.equalsIgnoreCase(second)) { 
         if (first.compareToIgnoreCase(second)>0){ 
          biggest=first; 
         } 
         if (first.compareToIgnoreCase(second)<0){ 
          smallest=first; 
         } 
        } 

       } 
      } 
System.out.println(biggest); 
      System.out.println(smallest); 

我能够然而检索比较每个值,结果总是显示霍金作为最大和最小的。

我希望的结果是Ada Lovelace最大,Tony Hoare最小。

回答

1

你的条件语句似乎是错误的。

     if (first.compareToIgnoreCase(second)>0){ 
          biggest=first; 
         } 
         if (first.compareToIgnoreCase(second)<0){ 
          smallest=first; 
         } 

您正在比较外循环中的元素与内循环中的元素。您绝不会与biggestsmallest进行比较。

这应该可以帮助您找到列表中最大和最小的字符串。

String biggest = list.get(0); 
String smallest = list.get(0); 
for (int i = 1; i < list.size(); i++) { 
    if(list.get(i).compareToIgnoreCase(biggest) > 0) 
     biggest = list.get(i); 
    if(list.get(i).compareToIgnoreCase(smallest) < 0) 
     smallest = list.get(i); 
} 

或者,您可以使用Collections.min()和max(),如其他答案中所述。

5

您可以使用Collections.min /最大

+0

如何在'Collections.min(list)'后打印结果? – gymcode 2015-04-06 03:12:29

+0

String min = Collections.min(list) – 2015-04-06 03:15:50

1

在您使用List要求?你可能想看到http://docs.oracle.com/javase/7/docs/api/java/util/SortedSet.html。那么你可以使用first()和last()方法

1

我是新来的Java,但我还是能识别这个代码的多个问题:

  • 你为什么要硬编码的初始容量,以20?
  • 为什么你使用索引循环而不是每个?
  • 你为什么使用嵌套循环找到最小/最大?的
  • 使用别人,而不是运行相同的比较两次
  • 如果第一总是等于第二大和最小仍将门外汉
  • 而在去年,并直接修整你的问题,你的所有代码不被发现,如果最后一个项目是更大&小于任何列表中的其他项目,而不是所有的,因为你一直忽略先前的调查结果,并没有使用最大/最小作为任何比较的条件。