选择对多个基元进行排序

时间:2017-01-25 08:50:51

标签: java

此通用选择排序遇到问题。算法似乎很好,只是通过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;

        }
    }
}

1 个答案:

答案 0 :(得分:0)

有几个问题:

  1. 您传递ArrayLists数组作为参数
  2. 您的方法通用性声明错误
  3. 您的printArrays方法是多余的,可以用ArrayList上的简单.toString替换System.out.println("All Strings entered:" + arrString);
  4. ArrayList.size()
  5. ArrayList.set(i, obj).get(i)代替[i]
  6. 这是修复的排序方法:

      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);
    
                }
            }