[英]I want to implement DRY principle but don't know how
我在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個用於循環)。 我知道Java不會將方法作為參數傳遞。
我在考慮接口(我不太確定,我對接口不太了解),但是我需要一些有關如何操作的指南,或者我想知道是否還有其他選擇。
當您正在尋找重復數據刪除/干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]);
}
}
我將其集成到您的應用程序中是留給讀者的練習。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.