Java: Integer obj ne pouvez pas lancer de Comparable
Je vais avoir des problèmes en essayant de passer d'un nombre Entier d'objet à partir d'un pilote de classe en tant qu'argument à la fonction de SortedArray Générique classe que j'ai créée. De mon pilote de classe, je convertir l'utilisateur int entrée dans un objet Integer être coulé sur un Comparable de mon SortedArray classe.
- Je continuer à recevoir le message d'erreur "Exception in thread "main" java.lang.ClassCastException: java.lang.Entier ne peut pas être jeté à l'Comparables". J'ai pris un coup d'oeil à certains de mes camarades de classe, codes source, seulement pour trouver que peu de différence dans la définition des arguments/paramètres pourtant, ils ont leur code fonctionne très bien. J'ai cherché pendant des heures à essayer de trouver quelle est l'erreur que j'ai fait et je n'ai toujours pas pourquoi mon Entier objet ne peut pas être jeté à l'Comparables.
Voici un peu de mon SortedArray Classe
public class SortedArray implements Comparable{
public int size;
public int increment;
public int top;
Comparable[] a = new Comparable [size];
public SortedArray(int initialSize, int incrementAmount)
{
top = -1;
size = initialSize;
increment = incrementAmount;
}
public int appropriatePosition(Comparable value)
{
int hold = 0;
if(top == -1)
{
return 0;
}
else
{
for(int i = 0; i <= top; i++)
{
if(a[i].compareTo(value) > 0)
{
hold = i;
break;
}
}
}
return hold;
}
public void insert(Comparable value) //The function that my driver class needs to access
{
//Shifting numbers to the top
if(full() == true)
{
Comparable[] tempArray = new Comparable[top + increment];
for(int i= 0; i< size; i++)
{
tempArray[i]= a[i];
a = tempArray;
}
size = top + increment;
}
if(a[appropriatePosition(value) + 1] != null)
{
for(int i = top; i < appropriatePosition(value); i--)
{
a[i + 1] = a[i];
}
}
a[appropriatePosition(value) + 1]= value;
}
Voici le code de mon pilote de classe qui transmet Objet Integer insertObj comme un argument pour SortedArray de la fonction d'insertion.
public class IntDriver {
public static void main(String[] args)
{
Scanner keyboard = new Scanner(System.in);
//Creating variables
int data;
boolean check = false;
int choice;
int size = 5;
int increment = 3;
SortedArray b = new SortedArray(size, increment);
//Creating Menu
while(check == false)
{
System.out.println("Please choose through options 1-6.");
System.out.println("1. Insert\n2. Delete\n3. Clear\n4. Smallest\n5. Largest\n6. Exit");
choice = keyboard.nextInt();
switch(choice)
{
case 1:
System.out.println("Type the int data to store in array location.");
data = keyboard.nextInt();
Integer insertObj = new Integer(data);
b.insert(insertObj);//Here's where I lay "insertObj" as an argument for the SortedArray function.
System.out.println("The value " + data + " is inserted");
break;
Dans le code que vous avez posté, il n'y a rien d'être coulé. Pourriez-vous peut-être poster une SSCCE qui montre le comportement que vous décrivez? sscce.org
OriginalL'auteur TLM | 2010-01-21
Vous devez vous connecter pour publier un commentaire.
Le problème est que
Integer
s'étendjava.lang.Comparable
, alors votreComparable
n'est pas unjava.lang.Comparable
. Regardez le message d'erreur, votreComparable
vient du package par défaut plutôt quejava.lang
:Qui est, vous ne pouvez pas jeter
java.lang.Integer
à votre propre classeOriginalL'auteur axtavt
Comme mentionné par axtavt, le problème est que vous avez votre propre classe Comparables. Plus précisément, ce que cela signifie, c'est que:
Cela signifie que quelque part dans votre code, vous avez quelque chose comme:
Vous avez besoin de changer que:
Encore mieux, vous devez renommer votre Comparateur de classe à quelque chose qui n'entrent pas en collision avec les classes standard Java. En général, même si Java a namespacing, vous devriez essayer d'éviter vos classes ayant le même nom que le système de classes pour éviter exactement ce genre de confusion.
OriginalL'auteur Paul Wagland
Je n'ai pas mis trop d'efforts, mais ne serait-il pas juste être plus facile d'utiliser une
SortedSet
de mise en œuvre (ou de son enfant interfaceNavigableSet
) commeTreeSet
plutôt que de rédiger votre propre classe? C'est, à moins que vous vouliez les éléments en double...Bon point. J'ai utilisé de la question avec les devoirs de la balise.
OriginalL'auteur Powerlord