返回ArrayList

时间:2017-04-24 23:29:30

标签: java arraylist type-mismatch

我正在尝试创建一个程序,根据类型以及将放入ArrayList的值创建一个ArrayList。我们必须使用的输入结构是“I 6 7 5 3 1 -1 2”,其中I是Integer类型(或S表示String等),第一个数字(6)是I中的值。数组列表。我不确定如何实例化ArrayList。

public static void main(String[] args){
    Scanner scan = new Scanner(System.in);
    String type = scan.next();
    int length = scan.nextInt();
    int counter = 0;

    if (type.equals("I")) {
        ArrayList<Integer> A = new ArrayList<Integer>;
    }
    else if (type.equals("S")) {
        ArrayList<String> A = new ArrayList<String>;
    }
    else if (type.equals("D")) {
        ArrayList<Double> A = new ArrayList<Double>;
    }
    else {
        System.out.println("Invalid type");
    }

    while (scan.hasNext() && counter<length) {
        String s1 = scan.next();
        A.add(s1);
        counter += 1;
    }

    System.out.print(A);
}

//Removes any duplicate values in the arraylist by checking each value after it
public static <E> ArrayList<E> removeDuplicates(ArrayList<E> list) {
    ArrayList<E> inArray = list;
    for (int i = 0; i<inArray.size(); i++) {
        for (int j = i+1; j<inArray.size(); j++) {
            if (inArray.get(i) == inArray.get(j)) {
                inArray.remove(j);
            }
        }
    }
    return inArray;
}

//Shuffles the contents of the array
public static <E> void shuffle(ArrayList<E> list) {
    E temp;
    int index;
    Random random = new Random();
    for (int i = list.size()-1; i > 0; i--) {
        index = random.nextInt(i + 1);
        temp = list.get(index);
        list.set(index, list.get(i));
        list.set(i, temp);
    }
    System.out.print(list);
    return;
}

//Returns the largest element in the given arraylist
public static <E extends Comparable<E>> E max(ArrayList<E> list) {
    E max = Collections.max(list);
    System.out.println(max);
    return max;
}

2 个答案:

答案 0 :(得分:4)

我不能很清楚地给你你想要的答案,而是我会给你你需要的答案。

不要这样做!

根本没有任何意义。泛型编译时的数据类型擦除使ArrayList<Whatever>行为等同于ArrayList<?>除非您键入ArrayList

中的元素,否则无法在运行时确定泛型类型

您也可以编写此代码,它会给您完全相同的结果:

public static ArrayList<?> returnProper(String type) {
    if(type.length() == 1 && "ISD".contains(type)) {
        return new ArrayList();
    } else {
        System.out.println("Invalid type");
        return null;
    }
}

那么,请不要这样做

答案 1 :(得分:1)

将第二个E替换为&#34;?&#34;然后修复方法返回。

public static <T> ArrayList<?> returnProper(String type) {
    if (type.equals("I")) {
        return new ArrayList<Integer>();
    } else if (type.equals("S")) {
        return new ArrayList<String>();
    } else if (type.equals("D")) {
        return new ArrayList<Double>();
    } else {
        System.out.println("Invalid type");
    }

    return null;
}