Java 将方法传递到方法的变通方法?

Java 将方法传递到方法的变通方法?,java,function,math,methods,parameters,Java,Function,Math,Methods,Parameters,我正在寻找将一个方法作为参数传递给另一个方法的方法 我目前正试图用以下代码在Java中模拟牛顿方法(): public class Newton { // Iterationmethod public void newtonCalc(double x0) { double x; // counter int i = 0; //Newton-Iteration for x0 x = x0 - (y2(x0) / y2Deriv(x0));

我正在寻找将一个方法作为参数传递给另一个方法的方法

我目前正试图用以下代码在Java中模拟牛顿方法():

public class Newton {


// Iterationmethod
public void newtonCalc(double x0) {
    double x;

    // counter
    int i = 0;

    //Newton-Iteration for x0
    x = x0 - (y2(x0) / y2Deriv(x0));

    while (Math.sqrt(y2(x)*y2(x)) >= Math.pow(10, -10)){
        //Newton-Iteration x(n+1)
        x = x - (y2(x))/ y2Deriv(x);
        i++;
        System.out.printf("%d. %.11f\n",i,y2(x));
    }

    System.out.printf("%d steps were necessary for a resolution of 10^-10", i);
}

// Function for (2)
public static double y2(double x) {
    return Math.sin(x) / (1 - Math.tan(x));
}

// Derivative for (2)
public static double y2Deriv(double x) {
    return (Math.cos(x) + Math.sin(x) * Math.tan(x) * Math.tan(x))
            / ((Math.tan(x) - 1) * (Math.tan(x) - 1));
}

// Function for (4)
public static double y4(double x) {
    return Math.exp(-1/Math.sqrt(x));
}

// Derivative for (4)
public static double y4Deriv(double x) {
    return Math.exp(-1/Math.sqrt(x))/(2*Math.pow(x, 3d/2));
}



public static void main(String[] args) {
    Newton newton = new Newton();
    newton.newtonCalc(1);
}
}

newtonCalc(x0)在应该开始迭代的位置获得一个x0。 但函数(y2)现在硬编码到该方法中。我希望它是灵活的。 例如,newtonCalc(双x0,方法y)从x0开始为y运行迭代。 我有两个不同的函数(y2和y4,这两个函数都来自我讲座的练习表,加上迭代方法中使用的其导数y2Deriv和y4Deriv)

我知道传递方法是不可能的,但我没有任何简单的解决方法

请原谅我,如果这是不清楚或我错过了任何必要的信息

问候,


Tak3r07

完全有可能,因为Java 8,如果您想继续使用Java-8之前的方法,可以使用成员函数
eval
deriv
创建一个接口
函数
,并将派生类的实例(可能是匿名的)传递给Newton类调用


这可能看起来像(我不确定所有的细节都是正确的,这些只是说明这个想法的代码片段)


或者使用谷歌番石榴,我并没有完全理解你的意思。你想让我创建一个接口“函数”,它有两种方法——一种用于函数本身,另一种用于其派生。但是“将派生类的实例传递给newton类调用”是什么意思呢?添加了一些代码片段。我有一些关于regula-falsi方法的工作代码,但是没有找到。太棒了,谢谢!我甚至不知道我可以启动接口的对象。我对java的理解还处于初级阶段,事实并非如此。它使用提供的方法实现创建一个匿名类,并实例化该类的对象。例如,您将在事件和动作侦听器中经常发现这种构造。它最接近函子/lambda表达式,但实际上无法使用它们。
interface Function {
     public double eval(double x);
     public double deriv(double);
}

class Example1 implements Function {
     @override
     public double eval(double x) { return x*(x+3)+1; }
     @override
     public double deriv(double) { return 2*x+3; }
}

....

Solver solver1 = new Newton(new Example1(),x0);
....
Solver solver2 = new Newton(new Function(){
     @override
     public double eval(double x) { return cos(x); }
     @override
     public double deriv(double) { return -sin(x); }
}, x0);