2014-04-08 85 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 [INT []不能從靜態上下文中引用」錯誤調用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_。你的swap方法並不在乎它交換的值是什麼,它只關心它們在數組中的位置。 – gla3dr

0

你需要改變你的方法聲明爲靜態,如:

public static void MySort(int[] T) 

當類裝入JVM,另一方面實例變量初始化靜態變量對每個實例使用不同的價值,他們獲得創建當通過使用new()運算符或使用反射(如Class.newInstance())創建對象的實例時。

因此,如果您嘗試訪問非靜態變量沒有任何實例編譯器會抱怨,因爲尚未創建這些變量和他們沒有任何存在,直到創建一個實例,它們與任何實例相關聯。所以在我看來,只有在靜態上下文中不允許非靜態或實例變量纔有意義的理由是不存在實例。

更多here