pobieranie poprzedniej wartość z hashmapy?

0

Witam staram sie zrobić mapke z Pozycjami Row,Col
i malować kwadraciki np: http://i.dekros.ovh/2016-03/19-03-16_23-20-30.mp4 tutaj filmik jak to działa
chodź mam problem bo jak np usune jakiś kwadracik z środka to będzie dziura i chce to usunać
wiec zrobiłem hashMape
Position,Square
gdzie Position to Position(Row,Col) a Square to obiekt z x,y środka
i np mam Keye:
ROW COL
1 0
2 0
3 0
4 0
5 0
6 0
i np usuwam wartość 3 0
mam też taką metode która szuka pustego miejsca: http://hastebin.com/kifitufuve.java
i w tym wypadku metoda zwraca mi 3 0 i to jest dobre tylko żeby zrobić nastepny kwadrcik musze znać kordynaty starego czyli w tym wypadku 2 0 i nie wiem jak pobrać wartość 2 0 znajać 3 0 ... w tym wypadku wystarczy odjać ale np jakbym mial 0 90 wartość o dejmujać cofła by sie np 200 89 i tutaj dużo kombinowania z tym mam;/

0
Dekros napisał(a):

żeby zrobić nastepny kwadrcik musze znać kordynaty starego czyli w tym wypadku 2 0

Dlaczego akurat 2 0 ci potrzebny? Zdefiniuj "stary kwadrat" i w jaki sposób "robisz" kolejne kwadraty.

0

Nie wiem, czy dobrze rozumiem, ale może tu jest odpowiedź:
http://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html#lowerKey-K-

0

HashMap jest strukturą danych, które nie ma pojęcia kolejności. Jeśli masz jakiś porządek kluczy i Ci na nim zależy użyj http://docs.oracle.com/javase/8/docs/api/java/util/TreeMap.html.

Jak wspomniano w odpowiedzi wyżej pojęcie "starego kwadratu" jest niejasne, ale jakie ono by nie było może to jest dobry kandydat na metodę w klasie Position?

0

ok to jeszcze raz mam
tak jakby Sektory nazwijmy te kwadraciki sektorami
Każdy sektor ma swoją kordynate X,Z (X,Y) nazewnictwo obojetne oraz swoja pozycyje ROW/COL i działa tak dodając nowy sektor inkrementuje ROW kiedy ROW bedzie MAKS zeruje je i dodaje do COL +1 i tak dalej .... kiedy np usune Sektor o pozycji ROW=2 COL = 0 to robi sie tam "dziura" i nie chce by one były wiec pętlą np:
for(int col=0;col<max...)
for(int row=0;row<maxx.....){
Position key = new Position(row,col);
if(!map.containsKey(key){
//JEJ MAM DZIURKE!
return key;
}}}
i juz mam Pozycje gdzie jest dziura i teraz musza ja załatać a żeby to zrobić musze znać koordynaty wcześniejszego Sektora bo nowy Kordynaty nowego Sektora są tworzone poprzez stary Sektor i nie wiem jak by to pobierać

0

W takim razie pierwsze rozwiązanie, które przychodzi mi do głowy to trzymać:

  • ostanio wstawioną pozycję w "normalny sposób" (bez latania dziurek),
  • stos ostatnio usuniętych pozycji.

I wstawiasz nowy element w następujący sposób:

Position newPosition = null;
if (not stackWithPreviousDeletions.isEmpty()) {
    newPosition = stackWithPreviousDeletions.pop();
}
else {
    newPosition = previousPosition.next();
    previousPosition = newPosition;
}

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