【问题标题】:Having trouble using selection sort to sort an ArrayList of names in alphabetical order无法使用选择排序按字母顺序对名称的 ArrayList 进行排序
【发布时间】:2019-04-21 05:11:27
【问题描述】:

我正在尝试使用我的两种方法minimumPosition()maximumPosition(),使用选择排序按字母顺序按字母顺序对名称进行排序ArrayList<>。我在比较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”。

【问题讨论】:

  • 你甚至没有从main调用sort
  • 我还无法让我的方法工作尚未测试出来,我的if 语句出现错误,告诉我它需要array 而不是ArrayList&lt;&gt;
  • 不,它不是这么说的。它的意思是您不能使用array[minPos],因为array 不是 数组,并且您只能使用[] 访问数组的元素,而不是ArrayList 的元素。在询问错误时,请始终发布准确且完整的错误消息,而不是转述它。

标签: java sorting arraylist selection-sort


【解决方案1】:

简单的改变

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

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

如果您尝试在一个特定索引处获取元素两次,为什么要使用不同的方法进行尝试?

【讨论】:

    猜你喜欢
    • 2017-05-22
    • 1970-01-01
    • 2019-02-03
    • 2013-10-28
    • 2019-08-02
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    • 2011-10-13
    相关资源
    最近更新 更多