HEAP \ HashMap (Class java.lang.ClassCastException )
Nu har jeg siddet og kigget på dette "lort" i mere end 2 timer...og det vil bare ikke!! HJÆLP!Bliver ved med at få en (Class java.lang.ClassCastException) ved denne linie kode:
minHob = (hob) minMap.get(_dato);
i min min_HashMap klasse, selvom min ind-metode (i samme klasse) bruger fuldstændigt den samme linie kode og her virker det fint!!!!
her er min kode (det er 4 java filer - 3 klasse og en test(main))
1. klasse > projekt
public class projekt {
private String navn;
private int priotet;
private String beskrivelse;
private int start; //Dato...format?
private int slut; //Dato...format?
private min_HashMap hMap;
// constructor
public projekt(String _navn, int _priotet, String _beskrivelse, int _start, int _slut, min_HashMap _hMap) {
navn = _navn;
priotet = _priotet;
beskrivelse = _beskrivelse;
start = _start;
slut = _slut;
hMap = _hMap;
for (int i = start; i <= slut; i++){
_hMap.ind(""+i, this);
}
}
// set-metoder
public void setPriotet(int p) {
priotet = p;
}
public void setStart(int s) {
start = s;
}
public void setSlut(int s) {
slut = s;
}
// get-metoder
public String getNavn() {
return navn;
}
public int getPriotet() {
return priotet;
}
public int getStart() {
return start;
}
public int getSlut() {
return slut;
}
public String getBeskrivelse() {
return beskrivelse;
}
public void udskriv(projekt p) {
System.out.println("----------------------------------------------------");
System.out.println("PRIOTET > " + p.getPriotet());
System.out.println("NAVN > " + p.getNavn());
System.out.println("BESKRIVELSE > " + p.getBeskrivelse());
System.out.println("START DATO > " + p.getStart());
System.out.println("SLUT DATO > " + p.getSlut());
System.out.println("----------------------------------------------------");
}
}
2. klasse > hob
public class hob {
// minimums-hob > mindste node = rod
private projekt[] hob;
// array til indsættelse af projekt obj'er
private int index = 1;
// index skal altid pege på næste tomme plads i arrayet
// derfor initialiseres den med værdien 1, da vi ikke ønske at bruge plads 0 i arrayet
private String status;
// til hobStatus metoden
private String dato;
// contructor //
public hob(String _dato) {
hob = new projekt[16];
// opretter en ny hob med størrelsen 16-1 = 15 (plads 0 bruges ikke)
dato = _dato;
}
// metoder //
public void insert(projekt p) {
// insert metode....XXXX....
if(index == 1) {
hob[1] = p;
// hvis index = 1 er hoben tom, og det nye obj skal indsættes som rod (rod=1)
index++;
// index tælles 1 op hver gang der indsættes i arrayet,
// såden at index altid peger på den næste tomme plads i arrayet
}
else { // hvis index > 1 (...eller mindre, men det skal helst ikke forekomme!)
int midlertidigtHul = index;
// plads i arrayet hvor der er hul til en node
int parentIndex = index/2;
// find parent til ny tom node
int nytObjPrio = p.getPriotet();
// hent nyt obj's priotet
int parentPrio = hob[index/2].getPriotet();
// hent parent's (til ny tom node) priotet
if(nytObjPrio > parentPrio) {
// hvis det nye obj har en lavere priotet(dvs en større int > det er jo en minimums hob)
hob[index] = p;
// insert projekt-obj bagerst i arrayet
index++;
// index tælles 1 op hver gang der indsættes i arrayet,
// såden at index altid peger på den næste tomme plads i arrayet
}
else {
while(nytObjPrio <= parentPrio && index >1 ) {
//....XXXX....
hob[midlertidigtHul] = hob[parentIndex];
// rykker parent ned
midlertidigtHul = parentIndex;
// sætter midlertidigtHul til at pege på det nye hul i hoben,
// altså der var parent er blevet flyttet fra
if(parentIndex == 1)
// dvs hvis vi har nået roden skal der stoppes
break;
// der hoppes ud af WHILE
else{
parentIndex = parentIndex/2;
// finder den nye parent til midlertidigtHul
parentPrio = hob[parentIndex].getPriotet();
// finder den nye parents priotet, som bruges til,
// at undersøge betingelse i WHILE
}// else
}// while
hob[midlertidigtHul] = p;
// nyt obj indsættes på plads midlertidigtHul, som skulle være
// det korrekte sted at indsætte det nye objekt efter kontrol
// i WHILE løkken
index++;
// index tælles op, sådan at næste gang der indsættes
// blive det bagerst i arrayet
}// 2.else
}// 1.else
}// insert
public projekt sletMinimum() {
//....XXXX....
projekt min = hob[1];
// minimum skal returneres....XXXX....
hob[1] = hob[index-1];
// flyt sidste element til roden....XXXX....
index--;
// ....XXXX....
skubNed (1);
// ....XXXX....
return min;
// ....XXXX....
}
private void skubNed (int rod) {
// ....XXXX....
projekt temp;
// ....XXXX....
int j = 2*rod;
// index for evt venstre barn....XXXX....
if (j <= index) {
// der er et venstre barn....XXXX....
if (j < index && hob[j].getPriotet() > hob[j+1].getPriotet()) {
//....XXXX....
j++;
// der er et mindre hoejre barn....XXXX....
} // 2.IF
if (hob[rod].getPriotet() > hob[j].getPriotet()) {
// der skal ombyttes....XXXX....
temp = hob[rod];
hob[rod] = hob[j];
hob[j] = temp;
skubNed (j);
// traet nedenfor ordnes....XXXX....
} // 3.IF
} // 1. IF
} // skubNed
public String hobStatus() {
//....XXXX....
if(index == 1)
status = "Hoben er tom";
else
if(index < 16) status = "Der er stadig plads i hoben";
if(index == 16)
status = "Hoben er fuld, og der kan ikke indsættes flere projekter!";
return status;
}
public String toString () { // toString metode
String s = "";
for (int i=1; i<= index-1; i++)
s = s + " " + hob[i].getPriotet();
return s;
}
public int getIndex() {
return index;
}
public void udskrivAlle() {
int i = 1;
while (i < index-1) {
projekt p = hob[i];
p.udskriv(p);
i++;
}
}
public void udskrivEn() {
int i = index;
projekt p = hob[i];
p.udskriv(p);
}
}// hob
3. klasse > min_HashMap
import java.util.*;
public class min_HashMap {
private projekt mitProjekt;
private hob minHob;
private HashMap minMap;
public min_HashMap() {
minMap = new HashMap();
}
public void ind(String _dato, projekt _p) {
minHob = (hob)minMap.get(_dato);
if(minHob == null)
minHob = new hob(_dato);
minHob.insert(_p);
minMap.put(_dato, _p);
//minMap.put(dato, minHob);
}
public void out(String _dato) {
minHob = (hob) minMap.get(_dato);
if(minHob == null) //der findes ikke en hob på denne dato
System.out.println("Der er ikke oprettet en hob på denne dato");
else
minHob.udskrivAlle();
}
public HashMap getHashMap(){
return minMap;
}
}
4.klasse > (main) hobTest
import java.util.*;
public class hobTest {
public hobTest() {
}
public static void main(String[] args) {
String status, s;
int index;
projekt minimum;
min_HashMap minHashMappe;
minHashMappe = new min_HashMap();
// status = h.hobStatus(); System.out.println(status + "\n");
// udskriver hobens status
// public projekt(String _navn, int _priotet, String _beskrivelse, int _start, int _slut, min_HashMap _hMap)
// inserts
projekt _1 = new projekt("Frank", 10, "A", 2004100, 2004101, minHashMappe);
minHashMappe.out("2004100");
//minHashMappe.ind(2004101,_1);
System.out.println("Array'et er prioteret som følger: ");
//System.out.println("" + h);
//status = h.hobStatus(); System.out.println(status + "\n");
// udtagning af top priotet = sletning af top priotet
/* index = h.getIndex();
for (int i=0; i<index-1; i++)
{
minimum = h.sletMinimum();
System.out.println("----------------------------------------------------------------------");
System.out.println("Følgende priotet er taget ud, og er dermed næste arbejdsopgave i dag: ");
System.out.println("PRIOTET > " + minimum.getPriotet());
System.out.println("NAVN > " + minimum.getNavn());
System.out.println("BESKRIVELSE > " + minimum.getBeskrivelse());
System.out.println("START DATO > " + minimum.getStart());
System.out.println("SLUT DATO > " + minimum.getSlut());
System.out.println("Hoben ser nu ud som følger: " + h);
status = h.hobStatus(); System.out.println(status + "\n");
System.out.println("----------------------------------------------------------------------");
} */
}// main
}
