2014-04-08 4 views
-3
public class Makakiesmarkou { 

void swap(int i, int j, int[] arr) { 
    int t = arr[i]; 
    arr[i] = arr[j]; 
    arr[j] = t; 
} 

public void MySort(int[] T) 
{ 
    for(int m=0; m<T.length-1; m++) 
    { 
     int j=m; 
     for(int k=m+1; m<T.length-1; k++) 
     { 
      if(T[k]<T[j]) 
       j=k; 
     } 
     swap(T[j], T[m], T); 
    } 
} 

public static void main(String[] args) { 

    int[] pin= new int[50]; 
    MySort(pin); 
    System.out.println(Arrays.toString(pin)); 
} 

} 

ошибку, когда я называю MySort в главном классе «не статический метод MySort [ИНТ []] нельзя ссылаться из статического контекста»ошибка при вызове функции Void

, что я делаю неправильно ?

+0

сделать ваш статический метод – Manwal

+1

ли быстрый поиск в переполнение стека для вопросы о нестатических методах и статических контекстах. ОЧЕНЬ много дубликатов этого. –

ответ

1

Вы можете делать то, что сказал Салах, или вы можете создать экземпляр класса и вызвать MySort на том, что:

public static void main(String[] args) { 

    int[] pin= new int[50]; 
    Makakiesmarkou m = new Makakiesmarkou(); 
    m.MySort(pin); 
    System.out.println(Arrays.toString(pin)); 
} 
+0

Я понимаю, что это значит? Исключение в потоке "основного" java.lang.ArrayIndexOutOfBoundsException: 50 \t в makakiesmarkou.Makakiesmarkou.MySort (Makakiesmarkou.java:25) \t в makakiesmarkou.Makakiesmarkou.main (Makakiesmarkou.java:36) Java Результат: 1 – Constantine

+0

@Kostas Возможно, это связано с тем, что вы передаете неправильную вещь вашему методу свопа. Вы передаете _values_ в массиве, который вы хотите заменить, вместо _indices_ значений, которые вы хотите поменять. Ваш метод подкачки не волнует, каковы значения - это замена, это касается только того, где они находятся в массиве. – gla3dr

0

Вы должны изменить объявление вашего метода статичным, как:

public static void MySort(int[] T) 

статическая переменная инициализируется, когда класс загружается в JVM на другой переменной, например, рука имеет различное значение для каждого из экземпляров, и они получают созданы когда экземпляр объекта создается либо с помощью оператора new(), либо с использованием отражения, например, Class.newInstance().

Так что если вы попытаетесь получить доступ к нестационарной переменной без какого-либо экземпляра, компилятор будет жаловаться, потому что эти переменные еще не созданы, и они не имеют никакого существования до создания экземпляра и связаны с каким-либо экземпляром. Поэтому, по-моему, единственная причина, которая имеет смысл запретить нестационарную или переменную экземпляра внутри статического контекста, - это не существование экземпляра.

Подробнее here

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