Как использовать значение из функции x для конструкторов в функциях y - PullRequest
0 голосов
/ 27 мая 2019

У меня есть функция NodeTransitionFunction (Integer exp, Integer KVal), которая должна вычислить f (x) = (x ^ exp)% KVal.

Затем есть функция Integer apply (Integer val), котораянеобходимо вычислить f (val).

Теперь, чтобы установить конструктор для NodeTransitionFunction, как получить аргумент val из функции apply?

или я полностью пытаюсь решить эту проблему неправильнокстати?

public class NodeTransitionFunction {

    public NodeTransitionFunction(Integer exp, Integer KVal) {
        // CONSTUCTOR: Sets the class to calculate f(x) = (x ^ exp) mod KVal 

        // TODO
    }

    public Integer apply(Integer val) {
        // PRE: -
        // POST: Implements f(val)
        // TODO

        return null;
    }

    public static void main(String[] args) {
        NodeTransitionFunction f = new NodeTransitionFunction(3, 33);

        System.out.println(f.apply(5));
    }

}

1 Ответ

0 голосов
/ 27 мая 2019

Я думаю, что вы спрашиваете, как передать функцию конструктору, чтобы она могла быть применена позже. Если это так, то вам вообще не нужен класс: то, что вы определяете, это IntUnaryOperator - т.е. функция, которая принимает int и возвращает int.

Итак:

IntUnaryOperator makeNodeTransitionFunction(double exp, double mod) {
    return x -> Math.round(Math.mod(Math.power(x, exp), mod));
}

Затем, применяя его как:

makeNodeTransitionFunction(7, 11).apply(5)

Если вам нужно, чтобы он был в классе, вы можете сделать IntUnaryOperator приватным полем, которое назначается в конструкторе. Затем метод apply просто делегирует это поле.

...