Java 我想实现干式原理,但不要';我不知道怎么做
我在Java中有这个方法Java 我想实现干式原理,但不要';我不知道怎么做,java,Java,我在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
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;
}
public double[]prueba(整数维,字符串prueba){
random rd1=新的random(semilla,numSol);
双MEJORUCION[]=新的双[维度];
开关(prueba){
案例“schwefelUnimodal”:
对于(int i=0;i
它调用其他方法,这里只显示了3个(schwefelUnimodal、schwefelmultimal和rosenbrock),但我必须使用另外6个,它们都使用相同的参数(都是int),并且必须执行相同的操作(2表示循环)。
我知道Java不会将方法作为参数传递
我在考虑接口(我不是很确定,我对接口了解不多),但我需要一些关于如何做的指导,或者我想知道是否还有其他选择。当您寻找重复数据消除/枯竭的方法时,您应该寻找函数之间的共性 首先也是最重要的:接口在这里不会为您带来任何好处。您使用接口在所述接口的所有实现者之间强制执行特定契约;也就是说,无论您对
列表使用什么实现,它们都将具有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]);
}
}
public void doo操作(int维,int numSol,double[]树维度,double[]mejorSolucion){
对于(int i=0;i
将其集成到应用程序中是我留给读者的练习。如果不需要返回值,可以使用BiPredicate
将方法作为参数传递。这里有一些关于它和它的文档。如果你想要一个例子,我可以给你贴一个。哇!非常感谢。在我的谷歌搜索中,我从来没有发现BitFunction,我必须在谷歌搜索方面做得更好。我从来没有想过这一点。非常感谢你。我做了你建议我做的事。我还使用了双功能,因为它很酷。编辑:现在我知道我应该使用列表而不是数组(大多数时候)