我正在尝试使用选择排序对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”。
简单地改变
if(array.get(i).compareToIgnoreCase(array[minPos]) < 0)
至
if(array.get(i).compareToIgnoreCase(array.get(minPos)) < 0)
如果你试图将元素放在一个特定的索引上两次,你为什么要尝试使用不同的approches?