java - ClassCastException String cannot be converted to custom class -
this classcastexception
driving me crazy. when invoking method insert()
this:
exception in thread "main" java.lang.classcastexception: java.lang.string cannot cast rubrica$pair
hope can without loosing time :).
class rubrica implements dictionary { private object[] v; private int vsize; public static int initsize = 1; /* verifica se il dizionario contiene almeno una coppia chiave/valore */ public rubrica() { v = new object[initsize]; makeempty(); } private object[] resize(object[] v, int length) { object[] newv = new object[length * 2]; system.arraycopy(v, 0, newv, 0, length); return newv; } /* svuota il dizionario */ public void makeempty() { for(int = 0; < v.length; i++) v[i] = new pair(null, -1); vsize = 0; } /* inserisce un elemento nel dizionario. l'inserimento va sempre buon fine. se la chiave non esiste la coppia key/value viene aggiunta al dizionario; se la chiave esiste gia' il valore ad essa associato viene sovrascritto con il nuovo valore; se key e` null viene lanciata illegalargumentexception */ private object[] insertionsort(object[] v, int vsize) { for(int = 0; < vsize; i++) { comparable temp = ((pair)v[i]).getname(); int j; for(j = i; j > 0 && temp.compareto(((pair)v[j - 1]).getname()) < 0; j--) v[j] = v[j - 1]; v[j] = temp; } return v; } public void insert(comparable key, object value) { if(vsize == v.length) v = resize(v, vsize); if(key.equals(null)) throw new illegalargumentexception(); int index = binarykeyindexsearch(v, vsize, key); if(index == -1) v[vsize++] = new pair((string)key, (long)value); else v[index] = new pair((string) key, (long)value); v = insertionsort(v, vsize); } /* cerca nel dizionario l'elemento specificato dalla chiave key la ricerca per chiave restituisce soltanto il valore ad essa associato se la chiave non esiste viene lanciata dictionaryitemnotfoundexception */ private int binarykeyindexsearch(object[] v, int vsize, comparable value) { return binkeysearch(v, 0, vsize - 1, value); } private int binkeysearch(object[] v, int from, int to, comparable value) { if(from > to) return -1; int mid = (from + to) / 2; comparable midvalue = ((pair)v[mid]).getname(); //errore if(value.compareto(midvalue) == 0) return mid; else if(value.compareto(midvalue) < 0) return binkeysearch(v, from, mid - 1, value); else return binkeysearch(v, mid + 1, to, value); } //classe privata pair: not modify!! private class pair { public pair(string aname, long aphone) { name= aname; phone = aphone; } public string getname() { return name; } public long getphone() { return phone; } /* restituisce una stringa contenente - la nome, "name" - un carattere di separazione ( : ) - il numero telefonico, "phone" */ public string tostring() { return name + " : " + phone; } //campi di esemplare private string name; private long phone; } }
the problem in method:
private object[] insertionsort(object[] v, int vsize) { for(int = 0; < vsize; i++) { comparable temp = ((pair)v[i]).getname(); int j; for(j = i; j > 0 && temp.compareto(((pair)v[j - 1]).getname()) < 0; j--) v[j] = v[j - 1]; v[j] = temp; } return v; }
look closely, write temp
name of v[i]
, assign temp
v[j]
so have string
instead of pair
in v[j]
.
you rid of classcastexceptions if have used correct type array, pair[]
. mean if swap object[]
pair[]
see kind of incorrect assignment in compile time, not in runtime.
Comments
Post a Comment