Java Liczby Zespolone

Java Liczby Zespolone
JK
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 6 lat
  • Postów:55
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ć.

Kopiuj
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.
edytowany 1x, ostatnio: bogdans
bogdans
!Wstawiaj kod w znaczniki <code=java></code>
JK
szukałem podczas wstawiania posta i nie znalazłem, ale teraz już będę wiedział, dzięki :D
szarotka
  • Rejestracja:ponad 9 lat
  • Ostatnio:około 2 miesiące
  • Postów:533
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 :)

bogdans
inicjalizować za jego pomocą wartości klasy przy tworzeniu, może jednak wartości obiektu?
szarotka
No tak, obiektu. Korekta: inicjalizować za jego pomocą wartości INSTANCJI klasy przy tworzeniu.
JK
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 6 lat
  • Postów:55
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:

Kopiuj
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

szarotka
  • Rejestracja:ponad 9 lat
  • Ostatnio:około 2 miesiące
  • Postów:533
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ć):

Kopiuj
@Override
public String toString(){
     return "( " + re + "," + im +")";
     //return  re + "+" + im +"i";
}
JK
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 6 lat
  • Postów:55
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:

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

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

Kopiuj
 		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.

edytowany 1x, ostatnio: bogdans
bogdans
Pisz <code=java> a nie <code=java >
szweszwe
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Kraków
  • Postów:1694
1

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

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
2
Kopiuj
     public double modul(LiczbaZespolona c1){
        return  Math.sqrt(c1.re*c1.re+c1.im*c1.im);
    }

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

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

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 1x, ostatnio: bogdans
JK
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 6 lat
  • Postów:55
0

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

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

Kopiuj
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
	}

}
 
edytowany 1x, ostatnio: JareKanarek
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)