2015-10-20 77 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); 
}