Forum zamknięte. Zapraszamy do grupy na Facebooku
Odpowiedz 
 
Ocena wątku:
  • 0 Głosów - 0 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
Override metody equals
02-05-2015, 01:44 PM (Ten post był ostatnio modyfikowany: 02-05-2015 04:31 PM przez lolo.)
Post: #1
Override metody equals
Witam,
napisałem programik składający się z trzech klas (Data, DataList, Maker) do znajdywania ilości obiektów o podanych cechach, wśród obiektów zestawionych w tablicy. W tym celu użyłem override'u metody equals().
Jak widać poniżej mam dwa różne override'y tej metody (oba działają poprawnie - przynajmniej tak mi się wydaje). Moje pytanie jest takie: dlaczego drugi override metody equals(), działa tylko w tedy gdy na końcu zwracamy false?

public class Data 
{
//	POLA
	private String name;
	private String surname;
	private int age;
	private int nr;
	private static int nextNr;
	
//	SETTERY I GETTERY
	public int getNr()
	{
		return nr;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSurname() {
		return surname;
	}
	public void setSurname(String surname) {
		this.surname = surname;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
//	KONSTRUKTORY
	Data(){}
	
	Data(String name, String surname, int age)
	{
		nr=nextNr;
		nextNr++;
		setName(name);
		setSurname(surname);
		setAge(age);
	}
	
	static 
	{
		nextNr=1;
	}
	
//	OVERRIDE\'Y
	@Override
	public String toString() 
	{
		return nr+" "+getName()+" "+getSurname()+" wiek: "+getAge()+" lat.";
	}

//	PIERWSZY OVERRIDE EQUALS()
//	@Override
//	public boolean equals(Object obj) {
//		if (this == obj)
//			return true;
//		if (obj == null)
//			return false;
//		if (getClass() != obj.getClass())
//			return false;
//		Data other = (Data) obj;
//		if (age != other.age)
//			return false;
//		if (name == null) {
//			if (other.name != null)
//				return false;
//		} else if (!name.equals(other.name))
//			return false;
//		if (surname == null) {
//			if (other.surname != null)
//				return false;
//		} else if (!surname.equals(other.surname))
//			return false;
//		return true;
//	}
	
	
//	DRUGI OVERRIDE EQUALS()
	@Override
	public boolean equals(Object obj) 
	{
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (!(obj instanceof Data))
			return false;
		Data s = (Data) obj;
				
		if(this.name != null)
			if(this.surname != null)
				if(this.name.equals(s.getName()) && this.surname.equals(s.getSurname()) && this.age == s.getAge())
					return true;
		
		return false;
	}
}
import java.util.Scanner;
public class DataList 
{
//	POLA
	private Data[] list;
	public int i;
	
//	SETTER I GETTER
	public Data[] getList() {
		return list;
	}

	public void setList(Data[] list) {
		this.list = list;
	}
	
//	KONSTRUKTOR
	public DataList()
	{
		setList(new Data[10]);
		i=0;
	}
	
//	METODY
	
//	METODA DODAJĄCA OSOBY DO TABLICY "LIST"
	public void add()
	{
		Scanner input = new Scanner(System.in);
		System.out.println("Podaj imię:");
		String name = input.nextLine();
				
		System.out.println("Podaj nazwisko:");
		String surname = input.nextLine();
		
		System.out.println("Podaj wiek:");
		int age = input.nextInt();
		input.nextLine();
		list[i] = new Data(name, surname, age);
		i++;

	}

//	METODA DRUKUJĄCA DANE OSÓB Z TABLICY "LIST"
	public void print()
	{
		for(int x=0; x<i; x++)
		{
			System.out.println(list[x]);
		}
	}
	
//	METODA SPRAWDZAJĄCA ILE TAKICH SAMYCH OSÓB PODALIŚMY W TABLICY "LIST"
	public void checkAvalability(String name, String surname, int age)
	{
		Data check = new Data();
		check.setName(name);
		check.setSurname(surname);
		check.setAge(age);
		
		int avaliable=0;
		
		for(int b = 0; b<i; b++)
		{
			if (list[b].equals(check))
			avaliable++;

		}
		System.out.println("Liczba ludzi nazywających się Giovanni Giorgio: "+avaliable);
	}
}
public class Maker 
{

	public static void main(String[] args) 
	{
		DataList obj = new DataList();
		
//		DODAJE TRZY OSOBY
		obj.add();
		obj.add();
		obj.add();
		
//		DRUKUJE OSOBY DODANE
		obj.print();
		
//		SPRAWDZAM ILE JEST GIOVANNI GIORGIÓW W TABLICY
		obj.checkAvalability("Giovanni", "Giorgio", 75);
	}

}
Znajdź wszystkie posty użytkownika
Odpowiedz cytując ten post
02-05-2015, 04:35 PM
Post: #2
RE: Override metody equals
Jak dasz na końcu true to kod się nie kompiluje?

GG: 2802571
Znajdź wszystkie posty użytkownika
Odpowiedz cytując ten post
02-06-2015, 08:52 AM
Post: #3
RE: Override metody equals
Program komplikuje się poprawnie, jednak gdy na końcu jest true to nie porównuje obiektow ze soba. Ciężko jest mi na tym etapie wiedzy pojąć ze na końcu zwracajac false, metoda equals() działa poprawnie. Chodzi mi o to, dlaczego ta metoda spełniając wszystkie warunki po kolei, na końcu podając false, potrafi porównać stan obiektów.
Znajdź wszystkie posty użytkownika
Odpowiedz cytując ten post
02-06-2015, 10:26 AM
Post: #4
RE: Override metody equals
Jak się przejawia to nie porównywanie obiektórze sobą? Zwraca wyjątek czy co?

GG: 2802571
Znajdź wszystkie posty użytkownika
Odpowiedz cytując ten post
Odpowiedz 


Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości