如何让用户在Java中选择类型?
我想制作一个排序应用程序,让用户选择要排序的数组长度和随机填充数组的元素类型。例如,如果用户选择3作为长度,选择字符串作为类型,则数组可能如下所示:如何让用户在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
{‘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的有效实例,并根据需要进行类型转换。