Java Liczby Zespolone

0

Witam.
Dopiero uczę się javy i chciałbym was prosić o jakieś materiały, które pomogły by mi zrozumieć zależność między polem, obiektem, metoda, klasą.
Widziałem parę poradników, próbuję napisać też program, żeby wiedzę wykorzystać w praktyce, lecz kompletnie mi nie idzie zrozumienie tego.
Może powiem to na przykładzie programu, którego nie wiem jak wywołać.

public class LiczbaZespolona {
	public double re;
	public double im;

	private LiczbaZespolona(double re, double im){
		this.re = re;
		this.im = im;
	}
	public LiczbaZespolona suma(LiczbaZespolona x){
		double re = this.re + x.re;
		double im = this.im + x.im;
		return new LiczbaZespolona(re,im);
	}
	public static void main(String[] args) {
		LiczbaZespolona liczba = new LiczbaZespolona(3,6);
		System.out.println(liczba);
	}

} 

To od początku, chcę zrobić program, który na razie obliczy sumę liczb zespolonych.
Wiem jak działa przeładowanie metody, że tworzę kilka takich samych metod, lecz z innymi argumentami, i jak bd chciał wywołać jakąś metodę to podaję odpowiednie argumenty, ale nie rozumiem dlaczego:

  1. pola re i im sa tworzone Od razu w klasie,
    2)jak działa i co to w ogóle jest 'this',
    3)dlaczego metoda jest nazwana LiczbaZespolona suma(), a nie samo suma().
    Tak nawiasem dodam, że ten program mi nie działa, a bardzo bym chciał, żeby działał i nie potrzebuję aby ktoś się rozpisywał jeśli nie chcę, wystarczą mi same materiały dzięki którym to zrozumiem, lub jakieś ćwiczenia.
    Dziękuję i pozdrawiam.
4

Może powiem to na przykładzie programu, którego nie wiem jak wywołać

A z czym masz problem?

  1. pola re i im sa tworzone Od razu w klasie,

Patrz w google hasło: "Konstruktor".
Konstruktor jest właśnie po to by inicjalizować za jego pomocą wartości klasy przy tworzeniu. Takie wartości można by przypisać później ale po co? Skoro można to zrobić w jednej linii, czytelnie i za jednym zamachem.

2)jak działa i co to w ogóle jest 'this',

Pierwszy lepszy link:
http://javastart.pl/static/programowanie-obiektowe/parametry-i-slowo-kluczowe-this/

3)dlaczego metoda jest nazwana LiczbaZespolona suma(), a nie samo suma().

Metoda zwraca wartość typu LiczbaZespolona. Metoda nazywa się 'suma'.

Tak nawiasem dodam, że ten program mi nie działa

https://ideone.com/1kb83H
Nadpisz funkcję toString(), żeby wypisać re i im. Wszystko działa, nie panikuj facet :)

0

Wielkie dzięki szarotka, Twoja pomoc jest nieoceniona. Jakoś lepiej już idzie, ale nadal mam problem z wyświetleniem tego, pewnie mógłbym z public LiczbaZespolona suma zrobić void i dodać system.out.println i może by poszło, ale chciałbym wiedzieć dlaczego po skompilowaniu tego wyświetla mi się takie coś : "LiczbaZespolona@2a139a55", toString zapewne zamienie to jakoś na normalny język ale jak mam to zrobić ? Zamieszczam kod:

public class LiczbaZespolona {
	public double re;
	public double im;
	
	public LiczbaZespolona(){
		this.re = 0;
		this.im = 0;
	}
	public LiczbaZespolona(double re, double im){
		this.re = re;
		this.im = im;
	}
	public LiczbaZespolona suma(LiczbaZespolona c1){
		return new LiczbaZespolona(this.re+c1.re,this.im+c1.im);
	}
	
	public static void main(String [] argv){
		LiczbaZespolona c1 = new LiczbaZespolona(1,2);
		LiczbaZespolona c2 = new LiczbaZespolona(2,3);
		LiczbaZespolona z = c1.suma(c2);
		System.out.println(z);
	}
} 

Robię to na wykłady i lecę jak wykładowca to dał, ale z tego co testowałem to pierwszy konstruktor który przypisuje do re i im 0 jest nie potrzebny racja? Jeśli bym zamienił zera na re i im to konstruktor zamieniłby te re i im (this.re = re, this.im = im) na 0 czy przypisałby jakaś wartość z kosmosu? Tak ogólnie chodzi mi tylko o to jak zastosować toString. Dzieki z góry :D

1

Na ten moment nie korzystasz z tego pierwszego konstruktora.

Chodziło mi o coś takiego (pisane bez kompilacji, więc sprawdź czy ok i zdecyduj w jakim formacie chciałbyś wypisywać):

@Override
public String toString(){
     return "( " + re + "," + im +")";
     //return  re + "+" + im +"i";
}
0

Dzięki, działa pięknie, nie wiem na jakiej zasadzie, ale to sobie doczytam :D
Mam jeszcze jeden problem bo nie wiem co robię źle. Chciałbym zrobić jeszcze moduł ale nie wiem jak zwrócić sqrt. Tworzę nową metodę o tak:

 	public LiczbaZespolona modul(LiczbaZespolona c1){
		return  sqrt(c1.re*c1.re+c1.im*c1.im);
	}

, żeby to wywołać daję to :

 		LiczbaZespolona m = c1.modul(c1);
		System.out.println(m);

wywołanie jest pewnie źle bo raczej nie tak to powinno wyglądać ale i tak nie wiem jak zrobić te sqrt, jesli ktoś pomógłby będę bardzo wdzięczny.

1

Ale czy moduł z liczby zespolonej jest liczbą zespoloną? Na pewno chcesz zwracać obiekt klasy LiczbaZespolona a nie jakąś tam wartość?

2
     public double modul(LiczbaZespolona c1){
        return  Math.sqrt(c1.re*c1.re+c1.im*c1.im);
    }

Bezpieczniej - by uniknąć przepełnienia (niedopełnienia):

     public double modul(LiczbaZespolona c1){
        return  Math.hypot(c1.re,c1.im);
    }
0

Dzięki wam, wszystko działa jak trzeba !

Zamieszczam kod tak w razie czego, niepraktyczny i sklejony na ślinę, ale działa :D

public class LiczbaZespolona {
	public double re;
	public double im;
	//LiczbaZespolona c1 = new LiczbaZespolona(1,2);
	public LiczbaZespolona(){
		this.re = re;
		this.im = im;
	}
	public LiczbaZespolona(double re, double im){
		this.re = re;
		this.im = im;
	}
	public LiczbaZespolona suma(LiczbaZespolona c){
		return new LiczbaZespolona(this.re+c.re,this.im+c.im);
	}
	public LiczbaZespolona roznica(LiczbaZespolona c){
		return new LiczbaZespolona(this.re-c.re,this.im-c.im);
	}
	public LiczbaZespolona mnozenie(LiczbaZespolona c){
		return new LiczbaZespolona(this.re * c.re - this.im * c.im, this.re * c.im + this.im * c.re);
	}
	public LiczbaZespolona dzielenie(LiczbaZespolona c){
		double tmp = c.re * c.re + c.im * c.im;
		return new LiczbaZespolona((this.re*c.re+this.im*c.im)/tmp,(this.im*c.re-this.re*c.im)/tmp);
	}
	public double modul(LiczbaZespolona c){
		return Math.sqrt(c.re*c.re+c.im*c.im);
	}
@Override
	public String toString(){
	     //return "( " + re + "," + im +")";
	     return  re + "+" + im +"i";
	}
	public static void main(String [] argv){
		LiczbaZespolona c1 = new LiczbaZespolona(4,7);
		LiczbaZespolona c2 = new LiczbaZespolona(2,3);
		LiczbaZespolona suma = c1.suma(c2);
		LiczbaZespolona roznica = c1.roznica(c2);
		LiczbaZespolona mnozenie = c1.mnozenie(c2);
		LiczbaZespolona dzielenie = c1.dzielenie(c2);
		LiczbaZespolona m = new LiczbaZespolona();
		double modul = m.modul(c1);
		System.out.println(dzielenie); //w nawiasy wpisac suma/roznica/mnozenie/dzielenie/modul
	}

}
 

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