Program równanie kwadratowe i wyświetlanie rezultatów

2015-01-09 00:44
0

Witam!
Zacząłem naukę Javy i napisałem prosty programik konsolowy rozwiązujący równanie kwadratowe. Program działa, ale chciałbym się dowiedzieć w jaki sposób mógł bym przerobić owy kod by rozwiązanie pojawiało się po suatwieniu wartości a, b i c każdego odjektu tablicy, bo póki co najpierw muszę uzupełnić te dane dla wszystkich elementów po czym wyświetlane są wyniki dla wszystkich objektów.

Kodzik

import java.util.Scanner;

public class RównanieKwadratowe {

    private int a, b, c;
    private double delta;
    public int id;
    private static int nextId;

    private RównanieKwadratowe() {
        System.out.println("Jakie a? " );
            Scanner skaner = new Scanner(System.in);
           a = skaner.nextInt();

        System.out.println("Jakie b? " );
            b = skaner.nextInt();

        System.out.println("Jakie c? " );
           c = skaner.nextInt();

           delta = b*b - 4*a*c;
    }

    public int getId(){

            return id;
      }

    public RównanieKwadratowe(int a, int b, int c){
        this.a = a;
        this.b = b;
        this.c = c;
    }

    public String rozwiąż(){
        id = nextId;
            nextId++;
        String rozwiązanie;

           if (delta > 0){
            delta = Math.sqrt(delta);
            double x1 = (-b-delta) /2*a;
            double x2 = (-b+delta) /2*a;

            rozwiązanie = "Numer obiektu to: " + getId() + "\n Pierwiastek x1 to: " + x1 + " a pierwiastek x2 to: " + x2;

             }
        else if (delta == 0){
            double x0 = -b / (2*a);
            rozwiązanie = "Numer obiektu to: " + getId() + "\n Pierwiastek x0 wynosi: " + x0;
             }
        else{
            rozwiązanie = "Numer obiektu to: " + getId() + " \n Delta ujemna nie posiada pierwiastków";
            }
           return rozwiązanie;
    }

    public static void main(String[] args){

        RównanieKwadratowe[] równanie = new RównanieKwadratowe[3];

        równanie[0] = new RównanieKwadratowe();
        równanie[1] = new RównanieKwadratowe();
        równanie[2] = new RównanieKwadratowe();

        for (RównanieKwadratowe x:równanie){

            System.out.println(x.rozwiąż());
        }

    }

    static{
        nextId = 1;

      }
}

Pozostało 580 znaków

2015-01-09 02:18
1
RównanieKwadratowe[] równanie = new RównanieKwadratowe[3];
for (int i = 0; i < równanie.length; ++i) {
    równanie[i] = new RównanieKwadratowe();
    System.out.println(równanie[i].rozwiąż());
}

Swoją drogą nie używaj języka polskiego ani ogonków w kodzie.

Pozostało 580 znaków

2015-01-09 08:49
0

Uczę się na podstawie tutoriali w których wykorzystywane są polskie znaki. Też nie przywykłem do tego ale póki co nie irytuje mnie to a łatwiej mi zrozumieć podstawy.
Wszystko w swoim czasie.

Teraz czy dobrze rozumiem twój kod.

Metoda rozwiąż() i RównanieKwadratowe() wykonywana jest dla każdego elementu tablicy dopóki warunek wykonawczy pętli for jest true.
?

Dzięki wielkie za pomoc.

Zmień tutorial na jakiś normalny... - Shalom 2015-01-09 12:40

Pozostało 580 znaków

2015-01-09 10:23
1

Tak. W tym przypadku ta pętla jest równoważna temu:

RównanieKwadratowe[] równanie = new RównanieKwadratowe[3];

równanie[0] = new RównanieKwadratowe();
System.out.println(równanie[0].rozwiąż());
równanie[1] = new RównanieKwadratowe();
System.out.println(równanie[1].rozwiąż());
równanie[2] = new RównanieKwadratowe();
System.out.println(równanie[2].rozwiąż());

Pozostało 580 znaków

2015-01-09 15:25

Rozumiem. Ogromne dzięki!

Pozostało 580 znaków

2015-01-13 20:14
0

Witam.

Aktualnie przeglądam chyba ten sam tutorial co @Narudura ;). i natrafiłem na błąd.
Byłbym wdzięczny jeśli ktoś powiedziałby mi co jest nie tak.

Tak więc mając taki kod jak poniżej (gdzie funkcja solveEquation() zwraca Stringa z rozwiązaniem równania)

 QuadraticEquation2[] tab = new QuadraticEquation2[4];

        for(QuadraticEquation2 x : tab)
        {
            x = new QuadraticEquation2(4,5,1);

        }

        for(QuadraticEquation2 x : tab)
        {
            System.out.println(x.solveEquation());
        }

wyskakuje błąd "Exception in thread "main" java.lang.NullPointerException" w linijce "System.out.println(x.solveEquation());"

Natomiast jeśli pierwszego fora zapiszę w takiej formie jak poniżej

for(int i=0; i<tab.length; i++)
        {
            tab[i] = new QuadraticEquation2(4,5,1);

        }

Błędu już nie ma i program zadziała poprawnie.

Mógłby mi ktoś powiedzieć dlaczego tak się dzieje? Bo nie mogę zrozumieć dlaczego opcja nr.1 nie działa.

edytowany 1x, ostatnio: początkujący0, 2015-01-13 20:16

Pozostało 580 znaków

2015-01-13 20:22
1

W pętli foreach nadpisujesz lokalną zmienną x i dlatego masz NPEx

Pozostało 580 znaków

2015-01-13 20:46
0

Dzięki. już wszystko jasne ;)

Trochę źle zrozumiałem działanie tego fora. stąd moje głupie pytanie ;p

edytowany 1x, ostatnio: początkujący0, 2015-01-13 20:48

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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