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))
    }
}
Другие вопросы по тегам