Java 尝试更改类变量时出现静态引用错误
我得到的错误是,我不能对反转变量的非静态字段进行静态引用 我试图用这段代码做的是一个mergesort算法,当merge方法中发生事件时,它应该增加反转变量。一旦计算了整个算法,那么主要是打印反演 在线解决方案说创建我的类的实例,但是代码(没有反转)在没有创建类的实例的情况下工作。基本上,它如何仍然可以计算和运行mergeSort,但却无法保持计数器的运行。同样,目标是让它在变量递增后返回变量反转。下面的代码运行后应报告1进行反转 公共类CountInv{Java 尝试更改类变量时出现静态引用错误,java,static,Java,Static,我得到的错误是,我不能对反转变量的非静态字段进行静态引用 我试图用这段代码做的是一个mergesort算法,当merge方法中发生事件时,它应该增加反转变量。一旦计算了整个算法,那么主要是打印反演 在线解决方案说创建我的类的实例,但是代码(没有反转)在没有创建类的实例的情况下工作。基本上,它如何仍然可以计算和运行mergeSort,但却无法保持计数器的运行。同样,目标是让它在变量递增后返回变量反转。下面的代码运行后应报告1进行反转 公共类CountInv{ long inversion; pu
long inversion;
public CountInv() {
/* YOUR CONSTRUCTOR CODE HERE*/
}
public static void main(String[] args) {
System.out.println("Running");
int[] testarray = {1, 2, 3, 4, 5, 6, 7, 8, 10, 9};
inversion = 0;
System.out.println(testarray[0]);
//testarray = theclass.mergesort(testarray);
//CountInv theCountInv = new CountInv();
mergeSort(testarray);
System.out.println("END ARRAY");
for(int i = 0; i < testarray.length; i++)
{
System.out.println(testarray[i]);
}
}
public static void mergeSort(int[] inputArray) {
int size = inputArray.length;
if (size < 2)
return;
int mid = size / 2;
int leftSize = mid;
int rightSize = size - mid;
int[] left = new int[leftSize];
int[] right = new int[rightSize];
for (int i = 0; i < mid; i++) {
left[i] = inputArray[i];
}
for (int i = mid; i < size; i++) {
right[i - mid] = inputArray[i];
}
mergeSort(left);
mergeSort(right);
merge(left, right, inputArray);
}
public static void merge(int[] left, int[] right, int[] arr) {
int leftSize = left.length;
int rightSize = right.length;
int i = 0, j = 0, k = 0;
while (i < leftSize && j < rightSize) {
if (left[i] <= right[j]) {
arr[k] = left[i];
i++;
k++;
} else {
arr[k] = right[j];
k++;
j++;
inversion++;
}
}
while (i < leftSize) {
arr[k] = left[i];
k++;
i++;
}
while (j < rightSize) {
arr[k] = right[j];
k++;
j++;
inversion++;
}
}
长反转;
公共CountInv(){
/*这里是您的构造函数代码*/
}
公共静态void main(字符串[]args){
System.out.println(“运行”);
int[]testarray={1,2,3,4,5,6,7,8,10,9};
反转=0;
System.out.println(testarray[0]);
//testarray=class.mergesort(testarray);
//CountInv theCountInv=新的CountInv();
合并排序(testarray);
System.out.println(“结束数组”);
对于(int i=0;i 如果(左[i]可能是在静态方法中使用非静态字段导致了这个问题。我可能是错的,但是如果您只在类中访问这些方法,有什么特殊的原因使这些方法成为静态的吗?所有的方法都是静态的,但反转字段不是。差别很大。所以我将其反转为静态,它会计算,但我不会取消了解什么是静态。谢谢。谷歌的“java静态教程”,阅读: