簡體   English   中英

如何將類作為函數參數傳遞

[英]How to pass a class as a function parameter

我正在嘗試將類作為參數傳遞給方法,但不知道是否可行。

代替在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;
  }
}

您可能想做的是定義一個包含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()函數中。

是實現接口的處理參考。

創建一個名為SortingAlgorithminterface ,然后使用它創建排序的多個實現。 像這樣:

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);

  }
}

您可以為此使用接口。

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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM