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

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;
        
      }
}
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.

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.

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ąż());
0

Rozumiem. Ogromne dzięki!

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.

1

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

0

Dzięki. już wszystko jasne ;)

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

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