2015-10-20 66 views
1

我想通過一個類作爲參數的方法,但不知道它是否可能。如何通過一個類作爲函數參數

而不是在void runTest(String[] text, int[] number, String url)方法中調用Insertion class,我可以將它作爲參數傳遞,以便我可以添加其他排序算法。

這是我到目前爲止有:

Insertion insertion; 

void setup() { 
    String url = sketchPath("numbers/512/"); 
    insertion = new Insertion(); 
    String[] stringData = null; 
    int[] intData = null; 
    runTest(stringData, intData, url); 
} 


void runTest(String[] text, int[] number, String url) { 

    File directory = new File(url); 
    File[] listOfFiles = directory.listFiles(); 
    for (File file : listOfFiles) { 
    //println(file.getName()); 
    text = loadStrings(file); 
    number = int(text); 

    insertion.insertionSort(number); 

    } 
} 



class Insertion { 

    Insertion() { 
    } 

    int[] insertionSort(int[] input) { 

    int temp; 

    for (int i = 1; i < input.length; i++) { 
     for (int j = i; j > 0; j--) { 
     if (input[j] < input[j-1]) { 
      temp = input[j]; 
      input[j] = input[j-1]; 
      input[j-1] = temp; 
     } 
     } 
    } 
    println(input); 
    return input; 
    } 
} 

回答

5

什麼你可能想要做的就是定義一個Sort接口,它包含了sort()功能:

interface Sort{ 
    public int[] sort(int[] input); 
} 

然後讓你的Insertion類實現您的Sort接口及其sort()功能:

class Insertion implements Sort{ 

    Insertion() { 
    } 

    int[] sort(int[] input) { 
     //... 
    } 
} 

不要用於其他任何排序類相同,然後通過一個Sort變量到您的runTest功能:

void runTest(String[] text, int[] number, String url, Sort sortFunction) { 

    File directory = new File(url); 
    File[] listOfFiles = directory.listFiles(); 
    for (File file : listOfFiles) { 
    //println(file.getName()); 
    text = loadStrings(file); 
    number = int(text); 

    sortFunction.sort(number); 
    } 
} 

由於您的Insertion類(和你創建的任何其他排序類)實現了Sort接口,你可以將它們的實例傳遞給你的runTest()函數。

Here是實現接口的處理參考。

4

創建一個interface調用SortingAlgorithm然後用它創建多個排序實現。事情是這樣的:

interface SortingAlgorithm { 
    public int[] sort(int[]); 
} 

class BubbleSort implements SortingAlgorithm { 
    int[] sort(int[] input) { 
     // bubble sort code here 
    } 
} 

class InsertionSort implements SortingAlgorithm { 

    InsertionSort() { 
    } 

    int[] sort(int[] input) { 
     return insertionSort(input); 
    } 

    int[] insertionSort(int[] input) { 

    int temp; 

    for (int i = 1; i < input.length; i++) { 
     for (int j = i; j > 0; j--) { 
     if (input[j] < input[j-1]) { 
      temp = input[j]; 
      input[j] = input[j-1]; 
      input[j-1] = temp; 
     } 
     } 
    } 
    println(input); 
    return input; 
    } 
} 

現在使用的算法:

InsertionSort insertionSort; 
BubbleSort bubbleSort; 

void setup() { 
    String url = sketchPath("numbers/512/"); 
    insertion = new Insertion(); 
    String[] stringData = null; 
    int[] intData = null; 
    runTest(stringData, intData, url, insertionSort); 
    runTest(stringData, intData, url, bubbleSort); 
} 


void runTest(String[] text, int[] number, String url, SortingAlgorithm algorithm) { 

    File directory = new File(url); 
    File[] listOfFiles = directory.listFiles(); 
    for (File file : listOfFiles) { 
    //println(file.getName()); 
    text = loadStrings(file); 
    number = int(text); 

    algorithm.sort(number); 

    } 
} 
+1

感謝。我現在有了更好的理解。 – emre

4

你可以使用一個接口這一點。

public interface SortInterface{ 
void sortStuff(int[] input); 
} 

比你可以有很多不同的排序類實現此接口,例如

class Insertion implements SortInterface 
class BubbleSort implements SortInterface 

它們都具有相同的方法sortStuff(int[] input)實現的,你可以調用很多在

runTest(String[] text, int[] number, String url, SortInterface sortObject) 
{ 
sortObject.sortStuff(number); 
} 
相關問題