Я пытаюсь отсортировать 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;
}
Я ожидаю, что имена появятся в алфавитном порядке, начиная с «Энн» и заканчивая «Томми», а также в другой строке, переходящей от «Томми» к «Энн».