簡體   English   中英

我想執行DRY原理,但不知道如何

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM