Programming Beginner - программа на Java, адаптированная для C
Я новичок в написании программ на любом языке, и я пытаюсь написать простой метод Ньютона-Рафсона, который, я думаю, работает в 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))
}
4 ответа
Методы f
а также df
вне класса. Они должны быть объявлены внутри. Они должны быть static
поскольку они не привязаны к экземпляру, и вы будете вызывать их из статического метода.
это double f = (double);
незаконно Вы должны предоставить значение или ничего double f;
sin
а также cos
должно быть java.lang.Math.sin
а также java.lang.Math.cos
если вы не используете статический импорт.
Java отличается от C/C++ во многих отношениях, в том числе (особенно в этом вопросе), что вам нужно больше всего всего в определении класса, например
package ...
import ...
public class NewtRaphEx {
...
}
Таким образом, пакет определяет пространство имен, импорт определяет, какие пространства имен находятся в области видимости, а затем определение класса (то же имя, что и .java
имя файла) содержит все остальное. Обратите внимание, что вы можете иметь только один публичный класс в пределах .java
файл (в этом смысле Java ограничительна)
Учитывая ваш вопрос выше, я думаю, что хорошей отправной точкой является положить все в main()
метод (аналогичный main
в программе C).
public class NewtRaphEx {
public static void main(String[] args) {
// put your code here...
}
}
Вы намеревались объявить 2 функции, f
а также df
перед 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
методы внутри вашего класса.
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, следуя Учебникам по Java.
Извините за мой последний ответ (я не читал осторожно).
Есть 2 проблемы:
(1) d и df являются функциями / методом, а не переменными. Затем вы можете безопасно удалить верхние объявления, так как функции / метод объявлены в нижней части файла:
//Delete this
double f = (double);
double df = (double);
(2) Вы пытаетесь вызвать функцию-член (f и df) внутри статической функции (main). Это не сработает. Затем вы должны объявить эти функции как статические и переместить их в класс:
static double f(double x) {
return (x - cos(3.5 * x))
}
static double df (double x) {
return (1 + sin(3.5 * x))
}
}