ClassCastException String kann nicht in benutzerdefinierte Klassen konvertiert werden - Java, String, Dictionary, Classcastexception

Dies ClassCastException macht mich verrückt. Beim Aufruf der Methode insert() Ich verstehe das:

Exception in thread "main" java.lang.ClassCastException:
java.lang.String cannot be cast to Rubrica$Pair

Hoffe, dass jeder helfen kann, ohne viel Zeit zu verlieren :).

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 i = 0; i < v.length; i++)
v[i] = new Pair(null, -1);

vSize = 0;
}

/*
Inserisce un elemento nel dizionario. L"inserimento va sempre a 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 i = 0; i < 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: DO 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;
}
}

Antworten:

0 für die Antwort № 1

Das Problem ist bei dieser Methode:

private Object[] insertionSort(Object[] v, int vSize)
{
for(int i = 0; i < 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;
}

Schauen Sie genau hin, Sie schreiben zu temp der Name von v[i] und dann zuweisen temp zu v[j]So, jetzt hast du String Anstatt von Pair im v[j].

Sie könnten ClassCastException loswerden, wenn Sie den richtigen Typ für Ihr Array verwendet haben Pair[]. Ich meine, wenn du alles austauschst Object[] zu Pair[] Sie werden diese Art der falschen Zuordnung in der Kompilierungszeit, nicht in der Laufzeit sehen.


Verwandte Fragen
Speisekarte