2015-10-31 3 views
-4

Я получаю ошибку, которую я не могу сделать статической ссылкой на нестатическое поле для переменной инверсии.Статическая ссылка Ошибка при попытке изменить переменную класса

Что я пытаюсь сделать с этим кодом, является алгоритмом объединения, который должен увеличивать переменную инверсии, когда событие происходит в методе слияния. Как только весь алгоритм вычисляется, то в основном он должен печатать инверсию.

Решения онлайн говорят, чтобы сделать экземпляр моего класса, но код (без инверсии) работает без экземпляра класса. Как может, в основном, он все равно может вычислить и запустить 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++; 

    } 
} 
+4

Все методы являются статическими, но поле инверсии - нет. Большая разница. –

+0

Итак, я изменил его инверсию на статическую, и он вычисляет, но я не понимаю, что такое статичность. Спасибо хоть. – jakeinmn

+3

Google для «java static tutorial» и читайте: https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html –

ответ

0

Возможно, используя нестатическое поле в статическом методе вызывает проблему. Я могу ошибаться, но есть ли какая-то особая причина сделать методы статичными, если вы только получаете доступ к ним в своем классе?

Смежные вопросы