Witam. Jest to mój pierwszy post, zaczynam dopiero programowanie w Java, dlatego proszę o wskazówkę bądź podpowiedź gdzie mogłem coś spierniczyć.
Otóż problem wygląda następująco. Program ma porównywać podane lokalizacje np. budynek nr1 porównuje z piętrem 3 . Ogólnie Tworzenie struktury budynków ale z porównaniem coś już nie tak.
Podaje kod tutaj
import java.util.ArrayList;
public class zad6
{
public static void main(String[] args)
{
Building building1 = new Building(1);
Floor floor11 = new Floor();
floor11.addRoom(new Room());
floor11.addRoom(new Room());
floor11.addRoom(new Room());
floor11.addRoom(new Room());
Floor floor12 = new Floor();
floor12.addRoom(new Room());
floor12.addRoom(new Room());
floor12.addRoom(new Room());
Floor floor13 = new Floor();
floor13.addRoom(new Room());
floor13.addRoom(new Room());
Floor floor14 = new Floor();
floor14.addRoom(new Room());
Floor floor15 = new Floor(); // brak pokoi
building1.addFloor(floor11);
building1.addFloor(floor12);
building1.addFloor(floor13);
building1.addFloor(floor14);
building1.addFloor(floor15);
building1.opis();
Building building2 = new Building(2);
Floor floor21 = new Floor();
floor21.addRoom(new Room());
floor21.addRoom(new Room());
floor21.addRoom(new Room());
Floor floor22 = new Floor();
floor22.addRoom(new Room());
floor22.addRoom(new Room());
building2.addFloor(floor21);
building2.addFloor(floor22);
building2.opis();
Building building3 = new Building(3);
building3.opis();
System.out.println(building1.Identy.compareTo(floor21.Identy)); // tutaj się coś dzieje nie tak ?!?!
}
};
class Identy implements Comparable<Identy>
{
int noBuilding;
int noRoom;
int noFloor;
public Identy()
{
int noBuilding = 0;
int noRoom = 0;
int noFloor = 0;
}
public int getNoBuilding(){ return noBuilding; }
public int getNoRoom(){ return noRoom; }
public int getNoFloor(){ return noFloor; }
public void setNoBuilding(int noB){noBuilding = noB; }
public void setNoRoom(int noR){noRoom = noR; }
public void setNoFloor(int noF){noFloor = noF ;}
public int compareTo(Identy obiekt)
{
return new Integer(noBuilding).compareTo(obiekt.noFloor);
}
};
abstract class Lokalizacja {
protected Identy id;
public abstract void opis();
};
class Building extends Lokalizacja
{
protected static Identy id;
protected ArrayList<Floor>listFloor;
private int floor = 0;// licznik pięter
public Building(int noB)
{
id = new Identy();
id.setNoBuilding(noB);
listFloor = new ArrayList<Floor>();
}
public static Identy getId(){return id; }
public void addFloor(Floor f)
{
f.setBuilding(this);
f.id.noFloor = floor;
listFloor.add(f);
floor++;
}
public void opis()
{ System.out.println("===============================");
System.out.println("Budynek nr: " +id.noBuilding);
for(Floor floor : listFloor)
{floor.opis();}
//System.out.println("Pietro nr:"+ id.noFloor);
}
};
class Floor extends Lokalizacja
{
protected static Identy id;
protected ArrayList<Room>listRoom;
protected ArrayList<Floor>listFloor;
private Building parentBuilding; // rodzic budynku
private int room = 0; // licznik pokoi
private int floor = 1;// licznik pięter
public Floor()
{
id = new Identy();
listRoom = new ArrayList<Room>();
listFloor = new ArrayList<Floor>();
}
public static Identy getId(){ return id;}
public void setBuilding(Building b)
{
parentBuilding = b;
id.setNoBuilding(b.id.noBuilding);
}
public void addRoom(Room r)
{
r.setFloor(this);
r.id.noRoom = room;
listRoom.add(r);
room++;
}
public void opis()
{
System.out.println("Pietro nr : " + id.noFloor);
for(Floor floor : listFloor)
{floor.opis();}
id.noFloor = (id.noFloor - 1);
//System.out.println("Pietro nr: " + id.noFloor );
for(Room room : listRoom)
{room.opis();}
System.out.println("Liczba pokoi to: "+ room);
}
};
class Room extends Lokalizacja
{
protected ArrayList<Room>listRoom;
protected static Identy id;
private Floor parentFloor;
private int room = 1; // licznik pokoi
public Room()
{
id = new Identy();
listRoom = new ArrayList<Room>();
}
public void setFloor(Floor f)
{
parentFloor = f;
id.setNoBuilding(f.id.noBuilding);
id.setNoFloor(f.id.noFloor);
}
public void opis()
{
// System.out.println("Liczba pokoi to: "+ room);
//for(Room room : listRoom)
//{room.opis();}
}
};
W sumie to będzie zmiana : compareTo trzeba napisać samemu.
public int compareTo(Identy obiekt){
int comparison = new Integer(noBuilding).compareTo(obiekt.noBuilding);
if (comparison != 0)
return comparison;
comparison = new Integer(noFloor).compareTo(obiekt.noFloor);
if (comparison != 0)
return comparison;
comparison = new Integer(noRoom).compareTo(obiekt.noRoom);
if(comparison !=0)
return comparison;
return comparison;
}
.Tutaj wyrzuca błąd NullPointerException. Ogólnie dla wywołania tego ustrojstwa będziemy potrzebować budynek np.building1.Identy.compareTo(floor22.Identy); i tutaj ma wyświetlić różnicę między tymi obiektami ,tylko nie wiem jak ;/