[英]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()
函數中。
這是實現接口的處理參考。
創建一個名為SortingAlgorithm
的interface
,然后使用它創建排序的多個實現。 像這樣:
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.