Porównanie obiektów equalsem

Porównanie obiektów equalsem
G0
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 6 lat
  • Postów:76
0

Jak to zrobic za pomocą equals(albo za pomocą if, tylko jak przeslonic metode toSpring?)? Program uzupelnil juz tablice losowymi wartosciami.

Oto fragment tresci zadania: Sprawdz czy w tablicy Array3D i array2D istnieją elementy mające wspolne skladowe (x,y) tj. istnieją punkty punkt2D(x1,y1) i punkt3D (x2,y2,z2), takie ze x1=x2 i y1=y2. Jesli takie pary istnieją wypisz je na ekranie(wykożystaj metode toString() ).

Kopiuj
public static void main(String[] args) {
   (...)
System.out.println("--------------------------------");

Punkt2D [] array2D = new Punkt2D [100];
for(int i=0;i<array2D.length;i++){
array2D [i] = new Punkt2D() ;
array2D[i].LosujPunkty();

System.out.println(array2D[i]);
}

 

Punkt3D [] array3D = new Punkt3D [100];
for(int i=0;i<array3D.length;i++){
array3D [i] = new Punkt3D();
array3D[i].LosujPunkty();
System.out.println(array3D[i]);
}
System.out.println("-----------------"
    + "Porównywanie objektów equals:");


}    

Nawet jesli chce wygenerowac kod, to widzi tylko pola z obecnej klasy np z klasy punkt2D. A ja potrzebuje porównac tez z klasy punkt3D.

edytowany 4x, ostatnio: grzesiekm0
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4707
0

Wygeneruj tego equals i zobacz, może będzie dobrze :-) Metoda toString raczej nie powinna mieć z tym nic wspólnego.

A jak nie będzie dobrze - to pokaż definicję klas Punkt2D i Punkt3D.
Oraz jak porównujesz.


jeden i pół terabajta powinno wystarczyć każdemu
G0
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 6 lat
  • Postów:76
0

Nie do konca wiem jak dziala equals dlatego prosze o wyjasnienie.

Kopiuj
package punkt2d;

;
import java.util.Random;

public class Punkt2D {

   private int x1,y1;

    public int getX1() {
        return x1;
    }

   (...)
   
   public Punkt2D(){   // konstruktor bezparametrowy ustwia x i y na 0
       this.setX1(0);
       this.setY1(0);
   }
   
   public Punkt2D(int x1, int x2){ //konstruktor ustawiajacy podane wartosci
       this.setX1(x1);
       this.setY1(x2);
   }
 Random rand = new Random();   // metoda losująca liczby
   public void LosujPunkty(){
    x1 = rand.nextInt(20)-10;
    y1 = rand.nextInt(20)-10;
   
   }

public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Punkt2D other = (Punkt2D) obj;
        if (this.x1 != other.x1) {
            return false;
        }
        if (this.y1 != other.y1) {
            return false;
        }
        return true;
    }

--------------------

package punkt2d;


public class Punkt3D extends Punkt2D {
    
  private int x2,y2,z;

    public int getX2() {
        return x2;
    }
(..)
    
    public Punkt3D(){
    this.setX2(0);
    this.setY2(0);
    this.setZ(0);
    }
    
    public Punkt3D(int x2, int y2, int z){
        this.setX2(x2);
        this.setY2(y2);
        this.setZ(z);
    }
    
    public void LosujPunkty(){
    x2 = rand.nextInt(20)-10;
    y2 = rand.nextInt(20)-10;
    z  = rand.nextInt(20)-10;
   }
    
  public void porownaj(Punkt2D dwaD, Punkt3D trzyD){
  dwaD.equals(trzyD);

  }


edytowany 3x, ostatnio: grzesiekm0
G0
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 6 lat
  • Postów:76
0

Znalazlem w internecie takie cos. Porównanie kazdy element tablicy o takim samym indeksie ale jak zrobic zeby porównywalo x1 z x2 i y1 z y2 ?

Kopiuj
public boolean porownaj(Object[] o1, Object[] o2) {
              if (o1 == null || o2 == null)
                return false;
              if (o1.length != o2.length)
                return false;
              for (int i = o1.length - 1; i >= 0; i--) {
                if (!o1[i].equals(o2[i]))
                  return false;
              }
              return true;
            }
szarotka
  • Rejestracja:ponad 9 lat
  • Ostatnio:około 2 miesiące
  • Postów:533
6

metoda toString() służy do wypisania danych klasy
metoda equals() do porównania dwóch obiektów tego samego typu

Metoda equals w twoim przypadku nie jest odpowiednim rozwiązaniem, napisz jakąś inną metodę do porównywania, która przyjmowała by obiekty tupu Punkt2D i Punkt3D, bo spójrz na warunek:

Kopiuj
if (getClass() != obj.getClass()) {
         return false;
} 

(założeniem equals jest, że porównujemy obiekty tego samego typu, oczywiście mógłbyś na chama tam olać ten warunek, ale to by było mega słabe)

edytowany 1x, ostatnio: szarotka
G0
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 6 lat
  • Postów:76
0

No własnie tak podejrzewalem ze sie nie da, myslalem, ze da sie jakosc wyłączyc "z", ale kombinowalem. Spróbuje to zrobic normalnie i wstawie pozniej kod :)

szarotka
to nie kwestia, ze się nie da, tylko, że się tak nie robi
G0
Jak sie tak nie robi, to nie warto sie tego uczyc, prawda ? Nie kwestionuje twojej wypowiedzi, ale sam stwierdz czy to mi sie kiedys do czegos przyda ? Jesli tak to co musialbym zmienic w kodzie?
szarotka
  • Rejestracja:ponad 9 lat
  • Ostatnio:około 2 miesiące
  • Postów:533
5
Kopiuj
  private int x2,y2,z; 

to jest źle pomyślane. Patrz (kod skrócony, wrzucam istotny fragment):

Kopiuj
public class Point2D {
    private int x;
    private int y;

    public Point2D(int x, int y) {
        this.x = x;
        this.y = y;
    }
}

public class Point3D extends Point2D {
    private int z;

    public Point3D(int x, int y, int z) {
        super(x, y);
        this.z = z;
    }
 
  1. Samo porównywanie dwóch elementów na zasadzie:
Kopiuj
public boolean compare(Point2D point2D, Point3D point3D){
        return point2D.getX() == point3D.getX() && point2D.getY() == point3D.getY();
}

Sprawdz czy w tablicy Array3D i array2D istnieją elementy mające wspolne skladowe (x,y)

Kod:

Kopiuj
for (int i = o1.length - 1; i >= 0; i--) {
                if (!o1[i].equals(o2[i]))
                  return false;
}

porównuje pary punktów, czyli pierwszy punkt 2D z pierwszym 3D drugi 2D z 2 3D a nie każdy z każdym, a ja tak rozumiem treść zadania.

G0
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 6 lat
  • Postów:76
0

Byc moze numery przy x i y są w tresci zadania po to zeby zrozumiec sens, a tak naprawde ich nie powinno byc.

  1. To ma sens :)
  2. Tak powinno byc w tym przypadku?
  3. Nie wiem o co chodzi w sprawdzaniu wspolnych skladowych ? Ten kod porównuje elementy tablicy, czyli o1[i] {x, y} z o2[i] {x, y, z } czyli zawsze bedzie false ?
szarotka
2. tak (to co podałam jest ok) 3. chodziło mi o to, że w tym kodzie co wrzuciłeś porównywane są elementy pierwszy z tablicy punktów 2D z pierwszym z tablicy elementów 3D, drugi z drugim, a ja intrpretuję treść zadania, żeby porównywać wszystkei elementy, czyli pierwszy z tablicy 2D z pierwszym, drugim, trzecim, ... tablicy 3D, drugi z pierwszym, drugim, trzecim ...
G0
3. Ok to rozumiem, tylko w jaki sposob to zrobiles w 2 ? Słuzy do tego komparator(szczerze musze poczytac co to jest)? Bo napisales tak jakby "recznie", zwróc x jesli x == x, y y == y, czyli ze nie porownuje kazdy z kazdym, tak to rozumiem, wyjasnij w skórcie a ja sobie o tym poczytam :)
szarotka
  • Rejestracja:ponad 9 lat
  • Ostatnio:około 2 miesiące
  • Postów:533
3

Słuzy do tego komparator(szczerze musze poczytac co to jest)? Bo napisales tak jakby "recznie", zwróc x jesli x == x, y y == y, czyli ze nie porownuje kazdy z kazdym, tak to rozumiem, wyjasnij w skórcie a ja sobie o tym poczytam :)

Nie no to jest jakaś twoja funkcja, którą możesz nazwać porównajDwaPunkty() i porównuje ona dwa punkty, w sumie tutaj nazwa mogłaby być inna czySąTeSame albo jakos tak, a żeby porównać każdy z każdym, to musisz dodać pętle dwie.

Kopiuj
for(Point2D p2D : array2D){
      for(Point3D p3D : array3D){
            if(compare(p2D, p3D)){
                  System.out.println("Równe: " + p2D + " oraz " + p3D);
            }
      }
}

Bo napisales tak jakby "recznie", zwróc x jesli x == x, y y == y

Nie zwraca true lub false a nie x czy y.

A tka w ogóle to jestem kobietą, myślałam, że avatar + nick, to wystarczająca wskazówka.

G0
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 6 lat
  • Postów:76
0

Juz to rozumiem wyjasnilas mi wszystko.
Przepraszam bylem z byt zajety Javą i nie zwrócilem uwagi na takie szczegóły wybacz.

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)