Как преобразовать класс Java в groovy?

Я работаю над проектом, в котором хочу преобразовать код Java в Groovy и/или могу импортировать код Java в функцию в groovy. Он отлично работал с java, но не работал, как ожидалось, в groovy.

В основном нужно написать функцию, в которой сгенерированный код Уолша умножается на данные и выдает распространяемые данные. поэтому минимально потребовалось (2 ^ 2 = 4 узла), чтобы показать базовую функциональность.

 // Java code illustrating a simple implementation of CDMA
import java.util.*;
 
public class simple_cdma {
 
    private int[][] wtable;
    private int[][] copy;
    private int[] channel_sequence;
 
    public void setUp(int[] data, int num_stations)
    {
 
        wtable = new int[num_stations][num_stations];
        copy = new int[num_stations][num_stations];
 
        buildWalshTable(num_stations, 0, num_stations - 1, 0,
                num_stations - 1, false);
 
        showWalshTable(num_stations);
 
        for (int i = 0; i < num_stations; i++) {
 
            for (int j = 0; j < num_stations; j++) {
 
                // Making a copy of walsh table
                // to be used later
                copy[i][j] = wtable[i][j];
 
                // each row in table is code for one station.
                // So we multiply each row with station data
                wtable[i][j] *= data[i];
            }
        }
 
        channel_sequence = new int[num_stations];
 
        for (int i = 0; i < num_stations; i++) {
 
            for (int j = 0; j < num_stations; j++) {
                // Adding all sequences to get channel sequence
                channel_sequence[i] += wtable[j][i];
            }
        }
    }
 
    public void listenTo(int sourceStation, int num_stations)
    {
        int innerProduct = 0;
 
        for (int i = 0; i < num_stations; i++) {
 
            // multiply channel sequence and source station code
            innerProduct += copy[sourceStation][i] * channel_sequence[i];
        }
 
        System.out.println("The data received is: " +
                (innerProduct / num_stations));
    }
 
    public int buildWalshTable(int len, int i1, int i2, int j1,
                               int j2, boolean isBar)
    {
        // len = size of matrix. (i1, j1), (i2, j2) are
        // starting and ending indices of wtable.
 
        // isBar represents whether we want to add simple entry
        // or complement(southeast submatrix) to wtable.
 
        if (len == 2) {
 
            if (!isBar) {
 
                wtable[i1][j1] = 1;
                wtable[i1][j2] = 1;
                wtable[i2][j1] = 1;
                wtable[i2][j2] = -1;
            }
            else {
 
                wtable[i1][j1] = -1;
                wtable[i1][j2] = -1;
                wtable[i2][j1] = -1;
                wtable[i2][j2] = +1;
            }
 
            return 0;
        }
 
        int midi = (i1 + i2) / 2;
        int midj = (j1 + j2) / 2;
 
        buildWalshTable(len / 2, i1, midi, j1, midj, isBar);
        buildWalshTable(len / 2, i1, midi, midj + 1, j2, isBar);
        buildWalshTable(len / 2, midi + 1, i2, j1, midj, isBar);
        buildWalshTable(len / 2, midi + 1, i2, midj + 1, j2, !isBar);
 
        return 0;
    }
 
    public void showWalshTable(int num_stations)
    {
 
        System.out.print("\n");
 
        for (int i = 0; i < num_stations; i++) {
            for (int j = 0; j < num_stations; j++) {
                System.out.print(wtable[i][j] + " ");
            }
            System.out.print("\n");
        }
        System.out.println("-------------------------");
        System.out.print("\n");
    }
 
    // Driver Code
    public static void main(String[] args)
    {
        /*
        *   C1 = [+1 +1 +1 +1]
        *   C2 = [+1 -1 +1 -1]
        *   C3 = [+1 +1 -1 -1]
        *   C4 = [+1 -1 -1 +1]
 
        *   Let their data bits currently be:
        *   D1 = -1
        *   D2 = -1
        *   D3 = 0 (Silent)
        *   D4 = +1
 
        *   Resultant channel sequence = C1.D1 + C2.D2 + C3.D3 + C4.D4
        *                              = [-1 -1 -1 -1] + [-1 +1 -1 +1] + [0 0 0 0] + [+1 -1 -1 +1]
        *                              = [-1 -1 -3 +1]
        *
        *   Now suppose station 1 wants to listen to station 2.
        *   Inner Product = [-1 -1 -3 +1] x C2
        *                 = -1 + 1 - 3 - 1 = -4
        *
        *   Data bit that was sent = -4/4 = -1.
        * */
        int num_stations = 4;
 
        int[] data = new int[num_stations];
 
        //data bits corresponding to each station
        data[0] = -1;
        data[1] = -1;
        data[2] = 0;
        data[3] = 1;
 
        simple_cdma channel = new simple_cdma();
 
        channel.setUp(data, num_stations);
 
        // station you want to listen to
        int sourceStation = 1;
 
        channel.listenTo(sourceStation, num_stations);
    }
}

Может ли кто-нибудь предложить мне, что не так с моим кодом?

Пожалуйста, добавьте код, который вы пробовали, и причину сбоя (например, ошибки, трассировки стека, журналы и т. д.), чтобы мы могли его улучшить.

cfrick 10.12.2020 17:46
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
481
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

прежде всего, я предлагаю вам следовать соглашениям Java bean YourClassName, yourVariable, а затем помнить типы данных по умолчанию

В строке 60

public int buildWalshTable(int len, int i1, int i2, int j1, int j2, boolean isBar)
    {
        ...
        // In Groovy the first parameter will be a BigDecimal not an int and will fail
        buildWalshTable(len / 2, i1, midi, j1, midj, isBar); 
        ...
        return 0;
    }

Таким образом, в Groovy это может быть изменено на:

public int buildWalshTable(BigDecimal len, int i1, int i2, int j1, int j2, boolean isBar)
    {
        ...
        // In Groovy the first parameter will be a BigDecimal
        buildWalshTable(len / 2, i1, midi, j1, midj, isBar); 
        ...
        return 0;
    }

Теперь переименуйте ваш класс из simple_cdma в SimpleCdma. Для этого я рекомендую использовать вашу IDE или текстовый редактор.

Наконец, просто нужно переименовать файл с .java на .groovy и готово.

Другие вопросы по теме