2010-10-28 7 views
1

Dans mon application est une classe exe dans une structure de données de file d'attente Java LinkedList.action simple enqueue, pas si simple

Pour une raison quelconque enqueue ne peut pas traiter le type d'étudiant. Tout semble bien sauf que je reçois cette erreur:

The method enqueue(String) in the type LinkedQueue<String> is not 
applicable for the arguments (Student) 

Voici le code. J'ai essayé de réorganiser les choses, mais je suis vraiment perdu, je ne peux pas changer la classe de file d'attente parce qu'elle est censée être générique.

String result; 
LinkedQueue<String> queue = new LinkedQueue<String>(); 
Student []studentGroup = { 
    new Student(new String("data")), 
    new Student(new String("data")), 
    new Student(new String("data")), 
    new Student(new String("data")), 
    new Student(new String("data"))}; 

for (int k = 0; k<studentGroup.length; k++) { 
    queue.enqueue(studentGroup[k]); 
} 


} 
} 

Éditer: était au milieu d'éditer le mate, mais merci. Et oui il lui manque une méthode principale et un nom de classe qui est intentionnel puisque beaucoup de gens font un googling pour ce code pour une affectation. Donc, je ne suis pas sûr de la configuration de LinkedQueue, car je devrai faire une dequeue et d'autres choses et je ne veux pas instancier plus que nécessaire.

Mais oui, j'ai ma tête sur creuse la quelque chose de si évident, mais je suis éveillé pendant 34 heures. Merci de m'avoir signalé les gars, c'est très apprécié.

+1

Le code n'est pas complet. Veuillez également formater le code de manière appropriée. – Bobby

Répondre

1

En disant LinkedQueue<String> vous demandez au compilateur de vérifier que tous les éléments de la liste sont de type String. Vous avez probablement voulu dire LinkedQueue<Student>. Si vous voulez accepter les deux (mauvaise idée), vous pouvez faire LinkedQueue<Object>

3

Votre LinkedQueue a le type générique String mais devrait avoir Student (si elle est censé ne contenir que Student objets (et les spécifications de celui-ci)):

LinkedQueue<Student> queue = new LinkedQueue<Student>(); 

Vous pourriez trouver le "Motivations for generics" sur WikiPedia intéressant. Beaucoup d'autres ressources sur les génériques sont également disponibles. En outre, pourquoi new Student(new String("data")),? new Student("data"), seront suffisantes (et plus lisible) si les chaînes sont pas nécessaire pour des cas différents.

+0

Ce n'est pas pareil. String s1 = "données"; Chaîne s2 = "data"; String s3 = new String ("données"); Objet s1 == s2 -> vrai mais s1 == s3> faux –

+0

@Vash Oh, oui je suppose que le "même" n'est pas tout à fait raison. Je vais réviser mon texte. Cependant, dans ce cas précis (si OP a posté un code "réel"), j'ai du mal à croire que les chaînes * doivent * être des instances différentes. – jensgram

+0

Ça devrait marcher dans les deux sens, je l'avais laissé tel quel parce que je bricolais une idée et que j'oublie de la changer. \t Cela devrait être bien trop nouveau étudiant ("A12345"); – TheyCallHimRavine

0

Vous essayez d'ajouter un objet de type étudiant à une file d'attente de chaînes. Vous devez avoir:

LinkedQueue<Student> queue = new LinkedQueue<Student>();