此通用选择排序遇到问题。算法似乎很好,只是通过bing的参数有问题。我需要能够传递整数,整数或字符串的Arraylist进行排序,然后打印出来。我认为问题在于我的泛型方法的标题,但我对泛型完全是新的所以我可能是错的。任何帮助表示赞赏。
import java.util.ArrayList;
import java.util.Scanner;
public class FunwithJava {
public static void main(String[] args)
{
ArrayList<Integer> arrInts = new ArrayList<Integer>();
ArrayList<Double> arrDoubles = new ArrayList<Double>();
ArrayList<String> arrString = new ArrayList<String>();
System.out.println("Enter any number of strings, ints or doubles" + "\n" + "Terminate with an empty entry");
getStrings(arrInts, arrDoubles, arrString);
selectionSort(arrString);
selectionSort(arrInts);
selectionSort(arrDoubles);
System.out.println("Total number of items entered: " + arrString.size() + " Type of items: String ");
System.out.println("Total number of items entered: " + arrInts.size() + " Type of items: Integer");
System.out.println("Total number of items entered: " + arrDoubles.size() + " Type of items: Doubles");
System.out.println("All Strings entered:" + PrintArrays(arrString));
System.out.println("All Integers entered: " + PrintArrays(arrInts));
System.out.println("All Doubles entered: " + PrintArrays(arrDoubles));
}
public static void PrintArrays(ArrayList<Integer> arrInts, ArrayList<Double> arrDoubles, ArrayList<String> arrString) {
int count = 0;
for (int i = 0; i < arrInts.size(); i++) {
System.out.print(arrInts.get(i) + ",");
count++;
if (count == 10) {
System.out.println();
count = 0;
}
}
}
public static void getStrings(ArrayList<Integer> arrInts, ArrayList<Double> arrDoubles, ArrayList<String> arrString) {
Scanner in = new Scanner(System.in);
while (in.hasNextLine()) {
String oneline = in.nextLine();
Scanner str = new Scanner(oneline);
if (oneline.equals(""))
break;
while (str.hasNext()) {
if (str.hasNextDouble()) {
arrDoubles.add(str.nextDouble());
}
if (str.hasNextInt()) {
arrInts.add(str.nextInt());
} else {
arrString.add(str.nextLine());
}
}
}
}
public static <Anytype extends Comparable<ArrayList<Anytype>[]>> void sort(ArrayList<Anytype> anytypeArrayList[]) {
for (int i = 0; i < anytypeArrayList.length - 1; i++) {
int ilow = i;
for (int j = i + 1; j < anytypeArrayList.length; j++) {
if (anytypeArrayList[ilow].compareTo((anytypeArrayList[j])) > 0) {
ilow = j;
}
}
Anytype itemp = anytypeArrayList[ilow];
anytypeArrayList[ilow] = anytypeArrayList[i];
anytypeArrayList[i] = itemp;
}
}
}
答案 0 :(得分:0)
有几个问题:
ArrayLists
数组作为参数printArrays
方法是多余的,可以用ArrayList上的简单.toString替换System.out.println("All Strings entered:" + arrString);
ArrayList.size()
ArrayList.set(i, obj)
和.get(i)
代替[i]
这是修复的排序方法:
private static <T extends Comparable<T>> void selectionSort(final ArrayList<T> anytypeArrayList) {
for (int i = 0; i < anytypeArrayList.size() - 1; i++) {
int ilow = i;
for (int j = i + 1; j < anytypeArrayList.size(); j++) {
if (anytypeArrayList.get(ilow).compareTo(anytypeArrayList.get(j)) > 0) {
ilow = j;
}
}
final T itemp = anytypeArrayList.get(ilow);
anytypeArrayList.set(ilow, anytypeArrayList.get(i));
anytypeArrayList.set(i, itemp);
}
}