Rzucanie wyjątku, jeżeli są dwa takie same obiekty

0

Mam takie zadanie:

Zaimplementuj odpowiednio konstruktor i przesłoń metodę toString klasy Miasto tak, aby podana w konstruktorze nazwa miasta była zwracana w metodzie toString. Zaimplementuj metody dodajMiasto i dodajDroge klasy Mapa tak, aby niemożliwe było dodanie dwa razy tego samego miasta do mapy oraz niemożliwe było utworzenie drogi pomiędzy miastami, które nie zostały do tej mapy dodane. W takich przypadkach należy rzucać odpowiednim wyjątkiem (MiastoIstniejeException oraz MiastoNieIstniejeException). Uwaga! Dwa miasta traktujemy jako takie same, jeśli mają taką samą nazwę.

Pierwszą część zadania mam za sobą.

Klasa Miasto:

public class Miasto extends Mapa
    {        
    String miasto;
    
    public Miasto(String nazwa)
    {
        miasto = nazwa;        
    }
    
    public String toString()
    {
        return miasto;
    }
    
    public static void main(String[] arg)
    {
        
    }    
}

Klasa Mapa:

public class Mapa {
    
    Miasto[] tablicaMiast = new Miasto[5];
   public Mapa()
   {
       
   }
           
    public void dodajMiasto(Miasto miasto) throws MiastoIstniejeException
    {
        
    }
    
    public void dodajDroge(Miasto skad, Miasto dokad, int dlugosc) throws MiastoNieIstniejeException {
                
    }
}

Mam jeszcze klasy MiastoIstniejeException oraz MiastoNieIstniejeException, ale są one obecnie puste.

Ktoś może mnie naprowadzić w jaki sposób sprawdzać czy istnieje już takie samo miasto?

0

Przeciążyć metodę equals() z klasy Object a póżniej ją wywołać w kodzie celem sprawdzenia czy obiekty są identyczne.

http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#equals(java.lang.Object)

0

Czy muszę przeciążać metodę equals?

Może wystarczy coś takiego:

public void dodajMiasto(Miasto miasto) throws MiastoIstniejeException
    {        
        if(tablicaMiast[0] == null)
           tablicaMiast[0] = miasto;
       else
        {
            tablicaMiast[1] = miasto;
            if(tablicaMiast[0].equals(tablicaMiast[1]));
            else
                throw MiastoIstniejeException("Takie same miasta.");           
        }
    }
0

Nie musisz. Ale kod który napisałeś raczej nie zadziała. Napisz sobie dodatkowo metodę w klasie Mapa, która sprawdzi, czy mapa zawiera miasto o danej nazwie i jeżeli tak to wtedy rzuć wyjątek jeżeli nie to dodaj miasto do tablicy (z tą tablicą przechowującą miasta to chyba niezbyt szczęśliwa idea - radziłbym użyć listy albo zbioru)

	public void dodajMiasto(Miasto miasto) throws MiastoIstniejeException {
		if (zawieraMiasto(miasto)) {
			throw new MiastoIstniejeException();
		} else {
			// kod dodający miasto do tablicy
		}
	}

	private boolean zawieraMiasto(Miasto miastoDoSprawdzenia) {
		for(Miasto m : tablicaMiast) {
			if(m.miasto.equals(miastoDoSprawdzenia)) return true;
		}
		return false;
	}

Piasne z palca więc może zawierać jakiś błąd ale ogólna idea powinna być ok.

BTW na jakiego czorta Miasto dziedziczy po Mapie???

1

@dymul

Arrays.binarySearch(arr, targetValue);
0
dymul napisał(a):

Nie musisz. Ale kod który napisałeś raczej nie zadziała. Napisz sobie dodatkowo metodę w klasie Mapa, która sprawdzi, czy mapa zawiera miasto o danej nazwie i jeżeli tak to wtedy rzuć wyjątek jeżeli nie to dodaj miasto do tablicy (z tą tablicą przechowującą miasta to chyba niezbyt szczęśliwa idea - radziłbym użyć listy albo zbioru)

	public void dodajMiasto(Miasto miasto) throws MiastoIstniejeException {
		if (zawieraMiasto(miasto)) {
			throw new MiastoIstniejeException();
		} else {
			// kod dodający miasto do tablicy
		}
	}

	private boolean zawieraMiasto(Miasto miastoDoSprawdzenia) {
		for(Miasto m : tablicaMiast) {
			if(m.miasto.equals(miastoDoSprawdzenia)) return true;
		}
		return false;
	}

Piasne z palca więc może zawierać jakiś błąd ale ogólna idea powinna być ok.

BTW na jakiego czorta Miasto dziedziczy po Mapie???

Ok, a co powinno znajdywać się wewnątrz klasy MiastoIstniejeException?
Obecnie:

MiastoIstniejeException() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

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