我是Java的新手,面临将通用数组声明为静态的问题。我需要你的帮助 解决和理解出了什么问题。
public class ThreadedSorter<E> {
private static int number_of_threads = 2;
private static E[] array, aux;
....
public static <E> E[] mergeSort(E[] unsortarray) {
array = unsortarray;
.....
return array;
}
private static void mergeSortHelper(int low, int hi) {
if(low==hi) return;
int mid = (low+hi) >> 1;
mergeSortHelper(low,mid);
mergeSortHelper(mid+1, hi);
merge(low,mid+1,hi);
}
private static void merge(int low, int hi, int upperBound) {
.....
while(low <=mid && hi <= upperBound)
if(array[low] <= array[hi])
aux[j++] = array[low++];
........
}
endclass
我面临以下声明的问题 - 说不能引用非静态类型变量 来自静态背景。
“private static E [] array,aux;”
你能告诉我我失踪的地方吗?
此致 PRATIK
答案 0 :(得分:1)
你想要做的事情根本无法完成。没有通用的静态成员。
通常你会将这些数组传递给其他方法。
public static <E> E[] mergeSort(E[] unsortarray) {
...
}
private static <E> void mergeSortHelper(
E[] arr, E[] aux, int low, int hi
) {
...
}
private static <E> void merge(
E[] arr, E[] aux, int low, int hi, int upperBound
) {
...
}
保持这个辅助数据为静态成员无论如何都不是一个好主意,因为这意味着你的方法不能同时调用。
答案 1 :(得分:1)
首先,你需要研究静态修饰符是什么,因为它是你要求的错误的来源。 https://stackoverflow.com/a/413904/3657704
我不明白为什么你会在你的代码中到处使用静态修饰符,当然在更高级的谈话中我会说你试图在一个名为&#34的类中完成具有大量静态字段和方法的东西; ThreadedSorter& #34 ;.
你有一个类方法调用实例变量是否有意义?它可能不会找到它,因为类加载器加载静态字段和方法,即使没有对象的实例存在,但是。
当然,radiodef答案也是正确的。