Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让用户在Java中选择类型?_Java_Arrays_Generics - Fatal编程技术网

如何让用户在Java中选择类型?

如何让用户在Java中选择类型?,java,arrays,generics,Java,Arrays,Generics,我想制作一个排序应用程序,让用户选择要排序的数组长度和随机填充数组的元素类型。例如,如果用户选择3作为长度,选择字符串作为类型,则数组可能如下所示: {‘ababa’, ‘abcd’, ‘fgh’ } abstract public class Sort<T extends Comparable<T>> { protected T[] array; public boolean isLessThan(T obj1, T obj2) { if (obj1.co

我想制作一个排序应用程序,让用户选择要排序的数组长度和随机填充数组的元素类型。例如,如果用户选择3作为长度,选择字符串作为类型,则数组可能如下所示:

{‘ababa’, ‘abcd’, ‘fgh’ }
abstract public class Sort<T extends Comparable<T>> {

protected T[] array;

public boolean isLessThan(T obj1, T obj2) {
    if (obj1.compareTo(obj2) < 0)
        return true;
    else
        return false;
}

public String toString() {
    String result = "";
    boolean first = true;
    for (T each : array) {
        if (first == true) {
            result += each.toString();
            first = false;
        } else {
            result += ", "+each.toString();
        }
    }
    return result;
}

abstract public void sort(T[] array);
}
import java.util.Arrays;
import java.util.Collections;
import java.util.List;


public class Bogo<T extends Comparable<T>> extends Sort<T> {

public T[] shuffle(T[] array) { //taken from www.journaldev.com/32661/shuffle-array-java
    List<T> list = Arrays.asList(array);
    Collections.shuffle(list);
    return list.toArray(array);
}


public boolean isSorted(T[] array) {
    for (int i = 0; i < array.length - 1; i++) {
        if (isLessThan(array[i+1], array[i])) {
            return false;
        }
    }
    return true;
}

public void sort(T[] array) {
    //if array is Sorted return array
    while (true) { //not needed for recursive method
        if (isSorted(array)) {
            super.array = array; //super.array same as this.array?
            break;
        } else { //otherwise shuffle array randomly
            super.array = shuffle(array);
        }
    }
    
}

}
为了对任何类型的数组进行排序,我创建了一个抽象类,如下所示:

{‘ababa’, ‘abcd’, ‘fgh’ }
abstract public class Sort<T extends Comparable<T>> {

protected T[] array;

public boolean isLessThan(T obj1, T obj2) {
    if (obj1.compareTo(obj2) < 0)
        return true;
    else
        return false;
}

public String toString() {
    String result = "";
    boolean first = true;
    for (T each : array) {
        if (first == true) {
            result += each.toString();
            first = false;
        } else {
            result += ", "+each.toString();
        }
    }
    return result;
}

abstract public void sort(T[] array);
}
import java.util.Arrays;
import java.util.Collections;
import java.util.List;


public class Bogo<T extends Comparable<T>> extends Sort<T> {

public T[] shuffle(T[] array) { //taken from www.journaldev.com/32661/shuffle-array-java
    List<T> list = Arrays.asList(array);
    Collections.shuffle(list);
    return list.toArray(array);
}


public boolean isSorted(T[] array) {
    for (int i = 0; i < array.length - 1; i++) {
        if (isLessThan(array[i+1], array[i])) {
            return false;
        }
    }
    return true;
}

public void sort(T[] array) {
    //if array is Sorted return array
    while (true) { //not needed for recursive method
        if (isSorted(array)) {
            super.array = array; //super.array same as this.array?
            break;
        } else { //otherwise shuffle array randomly
            super.array = shuffle(array);
        }
    }
    
}

}

但如果我想说

if user input is 1 
then declare as Integer[] 
else declare as String[] 
然后我得到:

array cannot be resolved to a variable 
Type mismatch: cannot convert from int to T

我尝试创建一个单独的类GenericArray,其中包含一个T数组作为变量,但后来我得到:

array cannot be resolved to a variable 
Type mismatch: cannot convert from int to T


有什么办法解决这个问题吗?

我不明白你想解决什么问题。如果已经存在要排序的数据,那么它将存储在具有特定类型的数组中,是吗?只是为了确保。。。你知道bogosort是个笑话,对吧?关键是它很糟糕,人们会取笑它。考虑到你正在做的事情,我想效率不是目标。但是要洗牌一个对象数组,您所要做的就是
Collections.shuffle(Arrays.asList(array))
,因为数组会备份列表。请注意,它不适用于基本数组。您不能。java是一种静态类型的语言。如果你真的必须这样做,那么考虑使用<代码>对象< /Cord>数组,如“<代码>对象[]数组=新对象[]{ABCD”,20 };代码>,则您希望在其中存储何种类型的数据并不重要。在对数据进行排序或获取数据时,请注意检查它是否是string或int的有效实例,并根据需要进行类型转换。