【问题标题】:ArrayList Retrieve First and Last Result without Sorting ArrayListArrayList 检索第一个和最后一个结果而不对 ArrayList 进行排序
【发布时间】:2015-04-06 02:55:15
【问题描述】:

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

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 最小。

【问题讨论】:

    标签: java arrays sorting netbeans arraylist


    【解决方案1】:

    你可以使用 Collections.min / max

    【讨论】:

    • Collections.min(list)之后如何打印结果?
    • String min = Collections.min(list)
    【解决方案2】:

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

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

    您将外循环中的元素与内循环中的元素进行比较。您永远不会与biggest 和smallest 进行比较。

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

     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(),如其他答案之一所述。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        我是 Java 新手,但我仍然可以识别出这段代码存在多个问题:

        • 为什么要将初始容量硬编码为 20?
        • 为什么要使用索引循环而不是 for each?
        • 为什么要使用嵌套循环来查找最小值/最大值?
        • 使用 else 而不是两次运行相同的比较
        • 如果第一个总是等于第二大,最小的将保持未启动
        • 最后,直接解决您的问题,您的所有代码所做的就是查找最后一项是否大于和小于列表中的 any 其他项,而不是所有项,因为您继续忽略以前的发现,不要在任何比较中使用最大/最小作为条件。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-01-20
          • 1970-01-01
          • 2012-06-11
          • 2013-11-29
          • 1970-01-01
          • 1970-01-01
          • 2013-12-27
          相关资源
          最近更新 更多