Возникли проблемы при использовании сортировки для сортировки ArrayList имен в алфавитном порядке - PullRequest
0 голосов
/ 21 апреля 2019

Я пытаюсь отсортировать 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;
   }

Я ожидаю, что имена появятся в алфавитном порядке, начиная с «Энн» и заканчивая «Томми», а также в другой строке, переходящей от «Томми» к «Энн».

1 Ответ

0 голосов
/ 21 апреля 2019

Просто измените

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

на

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

Если вы пытаетесь получить элемент по одному конкретному индексу два раза, почему вы пробуете его с разными подходами?

...