java - 我想实现 DRY 原则但不知道如何
问题描述
我在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 不会将方法作为参数传递。
我正在考虑接口(我不太确定,我不太了解接口),但我需要一些关于如何做的指导,或者我想知道是否还有其他选择。
解决方案
当您正在寻找重复数据删除/干涸的东西时,您应该寻找函数之间的共性。
首先也是最重要的:接口在这里不会为您带来任何好处。您使用接口来强制执行该接口的所有实现者之间的特定合同;也就是说,无论您对 a 使用什么实现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]);
}
}
将其集成到您的应用程序中是我留给读者的练习。
推荐阅读
- python - TypeError:只能连接str
- java - 尝试调用公共 API 时发生“java.net.UnknownHostException”
- swift - 使用 calayer 为视频上的移动水印设置动画
- flutter - 当函数作为参数传递时,为什么按钮颜色会变为禁用按钮颜色?
- java - 如何使用 @Configuration 注释将值传递给类中的构造函数?
- javascript - react.js 如何设法使用导入到 JavaScript 文件(组件)中的 CSS 文件?
- reactjs - ts-loader 提供了一个意外的加载器选项:紧凑
- c# - 统一的 Firebase 代码未分配给对象
- javascript - 在网站上播放启动视频之前,移动背景会短暂加载
- javascript - React-Router-Dom:在路由语法中使用组件与使用 /* component={componentName} */ 语法之间的区别?