Java 选择排序多个原语

Java 选择排序多个原语,java,Java,此泛型选择排序有问题。算法似乎很好,只是对bing传递的参数有问题。我需要能够通过数组列表的整数,双精度,或字符串进行排序,然后打印出来。我认为问题在于泛型方法的标题,但我对泛型一无所知,所以我可能错了。感谢您的帮助 import java.util.ArrayList; import java.util.Scanner; public class FunwithJava { public static void main(String[] args) {

此泛型选择排序有问题。算法似乎很好,只是对bing传递的参数有问题。我需要能够通过数组列表的整数,双精度,或字符串进行排序,然后打印出来。我认为问题在于泛型方法的标题,但我对泛型一无所知,所以我可能错了。感谢您的帮助

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;

        }
    }
}
import java.util.ArrayList;
导入java.util.Scanner;
使用Java的公共类{
公共静态void main(字符串[]args)
{
ArrayList arrInts=新的ArrayList();
ArrayList arrDoubles=新的ArrayList();
ArrayList arrString=新的ArrayList();
System.out.println(“输入任意数量的字符串、整数或双精度“+”\n“+”以空条目终止”);
getStrings(arrInts、arrdouples、arrString);
selectionSort(arrString);
选择排序(arrInts);
选择排序(ARR双精度);
System.out.println(“输入的项目总数:“+arrString.size()+”项目类型:String”);
System.out.println(“输入的项目总数:“+arrInts.size()+”项目类型:整数”);
System.out.println(“输入的项目总数:“+arrDoubles.size()+”项目类型:Doubles”);
System.out.println(“输入的所有字符串:“+PrintArray(arrString));
System.out.println(“输入的所有整数:“+printaries(arrInts));
System.out.println(“输入的所有双精度:“+PrintArrays(arrDoubles));
}
公共静态void打印数组(ArrayList arrInts、ArrayList ArrDouble、ArrayList arrString){
整数计数=0;
对于(int i=0;i0){
ilow=j;
}
}
Anytype itemp=anytypeArrayList[ilow];
anytypeArrayList[ilow]=anytypeArrayList[i];
anytypeArrayList[i]=itemp;
}
}
}

有几个问题:

  • 您将数组
    arrayList
    作为参数传递
  • 您的方法泛型声明是错误的
  • 您的
    printaries
    方法是多余的,可以用ArrayList
    System.out.println上的simple.toString替换(“输入的所有字符串:”+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);
    
                }
            }
    
    private static void selectionSort(最终ArrayList anytypeArrayList){
    对于(int i=0;i0{
    ilow=j;
    }
    }
    final T itemp=anytypeArrayList.get(ilow);
    anytypeArrayList.set(ilow,anytypeArrayList.get(i));
    anytypeArrayList.set(i,itemp);
    }
    }
    
    你怎么能有一个
    打印数组(List,List,List)
    却只用一个参数来调用它?这不是通用的(你似乎称之为)工作方式。由于此处只需要
    toString()
    方法(在print语句期间调用),因此可以简单地使用
    printary(ArrayList)
    考虑将问题标题更改为类似Java泛型方法声明的内容,并列出可比较的