无法使用选择排序按字母顺序对名称的ArrayList进行排序

问题描述 投票:-1回答:1

我正在尝试使用选择排序对ArrayList<>的名称进行排序,以使用我的两种方法minimumPosition()maximumPosition()按字母顺序按升序和降序排序名称。我在比较Strings时遇到了麻烦,因为它说.compareToIgnoreCase需要一个阵列但是发现了ArrayList<String>。我不确定是否有任何其他方法来比较ArrayList<>以字母顺序打印出我的名字。

我已经尝试将我的返回方法类型从int切换到String,但这没有帮助,我也尝试将一些变量类型从int切换到String只是为了看看是否有什么可行,但事实并非如此。我在网上搜索了一个解决方案,但我只找到了如何使用整数和数组的选择排序,而不是ArrayLists。我的代码中ArrayList<>的整数是我的工作的第二部分处理线性和二进制搜索,所以忽略它。我的主要关注点是ArrayList<>的名字。任何帮助将不胜感激,下面是我的代码示例。

    package classwork_additional1;
    import java.util.ArrayList;
    import java.util.Collections;

    public class Classwork_Additional1 {

    public static void main(String[] args){

       ArrayList<String> array = new ArrayList<>();
       array.add("Mary");
       array.add("Mike");
       array.add("Michael");
       array.add("Ann");
       array.add("Tom");
       array.add("Tommy");
       array.add("Bob");

       ArrayList<Integer> integers = new ArrayList<>();
       integers.add(10);
       integers.add(10);
       integers.add(5);
       integers.add(8);
       integers.add(10);
       integers.add(7);
       integers.add(10);


   }
    public static void sort(ArrayList<String> array)
   {  
      for (int i = 0; i < array.size() - 1; i++)
      {  
         int minPos = minimumPosition(array, i);
         swap(array, minPos, i);
      }
   }
    public static void swap(ArrayList<String> array, int i, int j)
   {
      String temp = array.get(i);
      array.set(i, array.get(j));
      array.set(j, temp);
   }
    private static int minimumPosition(ArrayList<String> array, int from){

      int minPos = from;
      for (int i = from + 1; i < array.size(); i++)
      {
         if (array.get(i).compareToIgnoreCase(array[minPos]) < 0) 
    minPos = i; 
      }
      return minPos;

    }

    private static int maximumPosition(ArrayList<String> array, int from)
   {  
      int maxPos = from;
      for (int i = from + 1; i < array.size(); i++)
      {
         if (array.get(i).compareToIgnoreCase(array[maxPos]) > 0) 
    maxPos = i; 
      }
      return maxPos;
   }

我希望这些名字按字母顺序排列,从“Ann”开始,然后上升到“Tommy”,另一行则从“Tommy”回到“Ann”。

java sorting arraylist selection-sort
1个回答
0
投票

简单地改变

if(array.get(i).compareToIgnoreCase(array[minPos]) < 0)

if(array.get(i).compareToIgnoreCase(array.get(minPos)) < 0)

如果你试图将元素放在一个特定的索引上两次,你为什么要尝试使用不同的approches?

© www.soinside.com 2019 - 2024. All rights reserved.