编程初学者-改编自C的Java程序

编程初学者-改编自C的Java程序,java,newtons-method,Java,Newtons Method,我对用任何语言编写程序都是全新的,我正在尝试编写一个简单的Newton-Raphson方法,我认为它在C语言中是有效的(没有编译,但根据以前的一个例子,它确实有效,所以我做了这个假设),但我意识到我不知道如何确切地从Java调用一个方法。。。我发现以下错误: NewtRaphEx.java:5: class, interface, or enum expected double f = (double); ^ NewtRaphEx.java:6: class, interface, or en

我对用任何语言编写程序都是全新的,我正在尝试编写一个简单的Newton-Raphson方法,我认为它在C语言中是有效的(没有编译,但根据以前的一个例子,它确实有效,所以我做了这个假设),但我意识到我不知道如何确切地从Java调用一个方法。。。我发现以下错误:

NewtRaphEx.java:5: class, interface, or enum expected
double f = (double); 
^
NewtRaphEx.java:6: class, interface, or enum expected
double df = (double); 
^
NewtRaphEx.java:39: class, interface, or enum expected
double f(double x) {
^
我想我调用的f和df方法不正确?这不是作业问题,只是我自己的练习

到目前为止,我的计划是:

/* Newton Raphson Method*/

import Scanner.java.util; 

double f = (double); 
double df = (double); 

public class NewtRaphEx {

    public static void main (String[] args) {

        double xn, e_allow, fn, fnew, eps, dfn, dfnew; 
        int n;
        int nMax = 10000;

        e_allow = 0.001;
        xn = 0.6;

        while (eps <= e_allow || n < nMax) {
            for (n = 0; n <= nMax; n++) {
                fn = f(xn); 
                dfn = df(xn);
                dx = -(fn / dfn); 
                xnew = xn + dx; 
                eps = Math.abs(dx / xn);
                n = n + 1; 
                System.out.println("N" + "\t" + "X" + "\t" + "F(x)" + "\t" + "dF(x)" + "\t" + "delX" + "\t" + "X_new" + "\t" + "Epsilon");
                System.out.println(n + "\t" + xn + "\t" + fn + "\t" + dfn + "\t" + dx + "\t" + xnew + "\t" + eps);
            }
        }
    }
}



// Creating Function f = x - cos(3.5x)

double f(double x) {
    return (x - cos(3.5 * x)) 
}

double df (double x) {
    return (1 + sin(3.5 * x))
}
/*牛顿-拉斐逊法*/
导入Scanner.java.util;
双f=(双);
双df=(双);
公共类纽特拉菲克斯{
公共静态void main(字符串[]args){
双xn、e_允许、fn、fnew、eps、dfn、dfnew;
int n;
int nMax=10000;
e_允许=0.001;
xn=0.6;

而(epsJava在许多方面与C/C++不同,包括(特别是本期)您需要类定义中的大部分内容,例如

package ...

import ...

public class NewtRaphEx {
   ...
}
因此,包定义名称空间,导入定义范围内的名称空间,然后类定义(与
.java
文件名同名)包含所有其他内容。请注意,
.java
文件中只能有一个公共类(java以这种方式受到限制)

考虑到您上面的问题,我认为一个好的起点是将所有内容放在
main()
方法中(在C程序中是
main


方法
f
df
在类外。它们必须在类内声明。它们应该是
static
,因为它们没有绑定到实例,您将从静态方法调用它们

double f=(double);
是非法的。必须提供一个值或不提供任何值
double f;


sin
cos
应该是
java.lang.Math.sin
java.lang.Math.cos
,除非您使用静态导入。

您打算在
main
函数之前声明两个函数,
f
df
。然后定义这两个函数。您可以这样做在C语言中,这不是C语言,而是Java语言

在Java中,您只能在顶层声明类和接口,并且方法是在它们内部定义的。因此,这些函数及其在类下面的定义是无效的:

import Scanner.java.util; 

//invalid
double f = (double);
//invalid
double df = (double); 

public class NewtRaphEx {
    //class content...
}
//invalid
// Creating Function f = x - cos(3.5x)
double f(double x) {
    return (x - cos(3.5 * x)) 
}
//invalid
double df (double x) {
    return (1 + sin(3.5 * x))
}
 static double f(double x) {
        return (x - cos(3.5 * x)) 
    }

    static double df (double x) {
        return (1 + sin(3.5 * x))
    }
}
要使应用程序正常工作,一种方法是在类内将这些函数重新定义为
静态方法

import Scanner.java.util; 

public class NewtRaphEx {
    //valid
    // Creating Function f = x - cos(3.5x)
    static double f(double x) {
        return (x - cos(3.5 * x)) 
    }
    //valid
    static double df (double x) {
        return (1 + sin(3.5 * x))
    }
    //class content...
}
我强烈建议您通过以下方式复习Java编程的基础知识。

对不起,我的最后一个答案(我没有仔细阅读)

有两个问题:

(1) d和df是函数/方法,而不是变量。然后,您可以安全地删除顶部声明,因为函数/方法在文件底部声明:

//Delete this
double f = (double);
double df = (double); 
(2) 您正试图在静态函数(main)中调用成员函数(f和df)。这将不起作用。然后,您应该将这些函数声明为静态函数,并将其移动到类中:

import Scanner.java.util; 

//invalid
double f = (double);
//invalid
double df = (double); 

public class NewtRaphEx {
    //class content...
}
//invalid
// Creating Function f = x - cos(3.5x)
double f(double x) {
    return (x - cos(3.5 * x)) 
}
//invalid
double df (double x) {
    return (1 + sin(3.5 * x))
}
 static double f(double x) {
        return (x - cos(3.5 * x)) 
    }

    static double df (double x) {
        return (1 + sin(3.5 * x))
    }
}

你已经声明了类外的变量。你应该阅读Java编程教程。从这里开始:我看到的唯一方法是
main
…你在谈论哪个方法?那么为什么这个方法被标记为C?我在这里没有看到C…@alk,因为OP试图将C代码改编成Java…谢谢,我已经阅读了ja中的基础知识我可以写基本程序,问题是我还需要同时学习C语言,所以我对特定的调用方法感到困惑,不完全理解如何在java中调用或使用方法,但我在这里尝试一些建议,看看它们是否有效!