【问题标题】:Static Reference Error from trying to change class variable [duplicate]尝试更改类变量的静态引用错误[重复]
【发布时间】:2015-10-31 22:14:07
【问题描述】:

我收到无法对反转变量的非静态字段进行静态引用的错误。

我试图用这段代码做的是一种合并排序算法,当合并方法中发生事件时,它应该增加反转变量。一旦计算了整个算法,然后在 main 中,它应该打印反转。

在线解决方案说要创建我的类的实例,但代码(没有反转)在没有创建类的实例的情况下工作。大体上,它如何仍然可以计算和运行mergeSort,但无法保持运行计数器。同样,目标是让它在递增后返回变量反转。下面的代码在运行后应该报告 1 反转。

公共类 CountInv {

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++;

    }
}

【问题讨论】:

标签: java static


【解决方案1】:

可能在您的静态方法中使用非静态字段会导致问题。我可能是错的,但是如果你只在你的类中访问它们,有什么特别的理由让这些方法成为静态的吗?

【讨论】:

    猜你喜欢
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-27
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-27
    相关资源
    最近更新 更多