Problem z obiektowym napisaniem programu (podstawy)

0

Witam, jestem studentem informatyki i próbuję nauczyć się programowania w Javie. Mam problem z obiektowym napisaniem programu, który miałby obliczyć dane funkcje po podaniu (w kodzie) liczby x.
Treść zadania wygląda następująco:

Napisz program, służący do obliczenia przybliżonych wartości poniżej podanych funkcji dla danej wartości x.
user image
Uwaga: aby uzyskać zadowalającą dokładność należy zsumować wiele elementów szeregu, ale zawsze skończoną liczbę elementów!

Dodam jeszcze, że mam napisać ten program obiektowo i właśnie nie wiem czy rozumiem co to znaczy. Wydaje mi się, że poniższy kod jest poprawny(oprócz tego, że f2 i f3 są kopią f1), niestety zwraca mi błąd o niezadeklarowanej zmiennej f1. Nie rozumiem, czemu program nie widzi zmiennej f1 skoro jest ona w objekcie, który stworzyłem. Kompilator, którego używam to BlueJ (w tym mi kazano pisać na uczelni). Proszę o pomoc.

import java.lang.Math;
import java.util.*;
   public class zadanie3_lista1
{
    double x;
    double k;
   
     public double silnia(double k){
           double wynik=1;
           for (int i = 2; i<=k; i++) {
            wynik = wynik * i;
        }
            return wynik;
        }
       
        public double f1(){
            double s=0.0, s2=0.0;
            for (int j=1; j<=k; j++){
            s=Math.pow(x, k)/silnia(k);
            s2+=s;
        }
        return s2;
           
        }
        public double f2(){
            double s=0.0, s2=0.0;
            for (int j=1; j<=k; j++){
            s=Math.pow(x, k)/silnia(k);
            s2+=s;
        }
        return s2;
           
        }
        public double f3(){
            double s=0.0, s2=0.0;
            for (int j=1; j<=k; j++){
            s=Math.pow(x, k)/silnia(k);
            s2+=s;
        }
        return s2;
           
        }
   
   
       
   
   
   
}
    class zad3
    {
       
       
   
 
    public void main()
    {
       
        zadanie3_lista1 zadanie = new zadanie3_lista1();
        zadanie.x=1.0;
        zadanie.k=1.0;
       
        System.out.println("Wynik pierwszej funkcji to:"+zadanie.f1+" Wynik drugiej funkcji to:"+zadanie.f2+" Wynik trzeciej funkcji to:"+zadanie.f3);
           
       
 
}
} 
0

Hej
Problemów w twoim programie jest parę. Nie korzystałem z BlueJ, ale z opisu na wikipedii wynika że to nie kompilator tylko IDE :) . Proponowałbym chociaż wkleić kod do eclipsa, bo tam ładnie podkreśli ci błędy.
Parę takich zmian:
Przenieść klase zad3 do osobnego pliku i oznacz ją jako publiczna. Dobrym nawykiem jest trzymać każdą klasę w osobnym pliku, o takiej samej nazwie, do tego metoda main powinna być:

public static void main(String[] args) { // coś tam dalej

Inaczej możesz mieć problem z uruchomieniem.

Co do samej obiektywności, moim zdaniem troszkę trudno tutaj stworzyć coś rozsądnego, bo po prostu będzie to przerost formy nad treścią. Mógłbyś zrobić np. jakieś trzy klasy i każda by implementowała funkcję. Wszystkie by dziedziczyły po jednej abstrakcyjnej. Ale to po prostu dziwne jest, i moim zdaniem należy podpytać prowadzącego o co mu konkretnie chodziło.

Poza tym ustaw sobie te dwa pola (x, i k) jako prywatne. I stwórz do nich coś takiego jak settery i gettery (i staraj się z nich korzystać). Dodatkowo silnie mógłbyś oznaczyć jako prywatną metodę.
Problem z f1, f2, i f3 jest taki : to nie są zmienne, to są metody. A metody się wywołuje: zadanie.f1();

Mam nadzieje że jakoś ci to pomoże :)

0

Dodam jeszcze, że w tym zadaniu nie powinieneś w ogóle korzystać z funkcji silnia().

0

Jeszcze jedno, skoro już używasz tej metody silnia to nie przekazuj do niej parametru k tylko użyj składowej klasy.

0

Dzięki za pomoc, już sobie poradziłem z problemem :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1