如何将 class 作为函数参数传递
How to pass a class as a function parameter
我正在尝试将 class 作为参数传递给方法,但不知道是否可行。
我可以不在 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
class 实现您的 Sort
接口及其 sort()
功能:
class Insertion implements Sort{
Insertion() {
}
int[] sort(int[] input) {
//...
}
}
对任何其他排序 class 执行相同的操作,然后将 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
class(以及您创建的任何其他排序 class)实现了 Sort
接口,您可以将它们的实例传递给您的runTest()
函数。
Here是实现接口的Processing参考。
创建一个名为 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);
}
我正在尝试将 class 作为参数传递给方法,但不知道是否可行。
我可以不在 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
class 实现您的 Sort
接口及其 sort()
功能:
class Insertion implements Sort{
Insertion() {
}
int[] sort(int[] input) {
//...
}
}
对任何其他排序 class 执行相同的操作,然后将 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
class(以及您创建的任何其他排序 class)实现了 Sort
接口,您可以将它们的实例传递给您的runTest()
函数。
Here是实现接口的Processing参考。
创建一个名为 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);
}