我在Java中有此方法。
public double[] pruebas(int dimension, String prueba) {
random rd1 = new random(semilla, numSol);
double mejorSolucion[] = new double[dimension];
switch (prueba) {
case "schwefelUnimodal":
for (int i = 0; i < numSol; i++) {
for (int j = 0; j < dimension; j++) {
tresDimenciones[j] = schwefelUnimodal(numSol, rd1.nextInt());
if (tresDimenciones[j] < mejorSolucion[j]) {
mejorSolucion[j] = tresDimenciones[j];
}
}
System.out.println("///////////Corrida " + i);
System.out.println("Primera:" + tresDimenciones[0] + "\nSegunda:" + tresDimenciones[1] + "\ntercera:" + tresDimenciones[2]);
}
break;
case "schwefelMultimodal":
for (int i = 0; i < numSol; i++) {
for (int j = 0; j < dimension; j++) {
tresDimenciones[j] = schwefelMultimodal(numSol, rd1.nextInt());
if (tresDimenciones[j] < mejorSolucion[j]) {
mejorSolucion[j] = tresDimenciones[j];
}
}
System.out.println("///////////Corrida " + i);
System.out.println("Primera:" + tresDimenciones[0] + "\nSegunda:" + tresDimenciones[1] + "\ntercera:" + tresDimenciones[2]);
}
break;
case "rosenbrock":
for (int i = 0; i < numSol; i++) {
for (int j = 0; j < dimension; j++) {
tresDimenciones[j] = rosenbrock(numSol, rd1.nextInt(), rd1.nextInt());
if (tresDimenciones[j] < mejorSolucion[j]) {
mejorSolucion[j] = tresDimenciones[j];
}
}
System.out.println("///////////Corrida " + i);
System.out.println("Primera:" + tresDimenciones[0] + "\nSegunda:" + tresDimenciones[1] + "\ntercera:" + tresDimenciones[2]);
}
break;
}
return mejorSolucion;
}
它调用了其他方法,这里只显示了3个(schwefelUnimodal,schwefelMultimodal和rosenbrock),但是我必须使用另外6个,它们都使用相同的参数(均为int)并且必须执行相同的操作(2个 for 循环)。 我知道Java不会将方法作为参数传递。
我在考虑接口(我不确定,我对接口了解不多),但是我需要一些有关如何操作的指南,或者我想知道是否还有其他选择。
答案 0 :(得分:1)
当您要寻找重复数据删除/干dry的东西时,应该寻找功能之间的通用性。
首要的是:接口在这里不会给您带来任何好处。您可以使用接口在该接口的所有实现者之间强制执行特定合同;也就是说,无论您为List
使用哪种实现,他们都将拥有size()
。
现在,重点是-您的switch语句中有非常非常通用的代码,除了不同的方法调用外,该代码似乎可以重复自身。
真正的区别在于您要提供的数组,但是您还需要引入许多其他常量状态的东西。因此,您只需创建一个方法即可抽象出tresDimenciones
数组中的差异。
public void doOperation(int dimension, int numSol, double[] tresDimenciones, double[] mejorSolucion) {
for (int i = 0; i < numSol; i++) {
for (int j = 0; j < dimension; j++) {
if (tresDimenciones[j] < mejorSolucion[j]) {
mejorSolucion[j] = tresDimenciones[j];
}
}
System.out.println("///////////Corrida " + i);
System.out.println("Primera:" + tresDimenciones[0] + "\nSegunda:" + tresDimenciones[1] + "\ntercera:" + tresDimenciones[2]);
}
}
将其集成到您的应用程序中是我要做的练习。