Я получаю ошибку, которую я не могу сделать статической ссылкой на нестатическое поле для переменной инверсии.Статическая ссылка Ошибка при попытке изменить переменную класса
Что я пытаюсь сделать с этим кодом, является алгоритмом объединения, который должен увеличивать переменную инверсии, когда событие происходит в методе слияния. Как только весь алгоритм вычисляется, то в основном он должен печатать инверсию.
Решения онлайн говорят, чтобы сделать экземпляр моего класса, но код (без инверсии) работает без экземпляра класса. Как может, в основном, он все равно может вычислить и запустить 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++;
}
}
Все методы являются статическими, но поле инверсии - нет. Большая разница. –
Итак, я изменил его инверсию на статическую, и он вычисляет, но я не понимаю, что такое статичность. Спасибо хоть. – jakeinmn
Google для «java static tutorial» и читайте: https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html –