Numéro de l'itération à travers ArrayLists
J'ai deux questions. J'ai ici un objet de type ArrayList
, et pour ce cas, nous allons l'appeler "Car"
.
J'ai fait 2 d'entre eux:
Car car1 = new Car();
Car car2 = new Car();
J'ai une fonction pour ajouter des éléments à ces objets car:
car1.addPart("Front Wheels");
car1.addPart("Rear Wheels");
car1.addPart("Rear View Mirror");
car2.addPart("Rims");
car2.addPart("Steering Wheel");
car2.addPart("Bumper");
J'ai besoin d'avoir une fonction appelée sameContents()
que je peux faire appel à car1
:
car1.sameContents(car2);
qui passe dans un objet de type ArrayList
et vérifie avec car1
pour voir si ils ont le même contenu et le même ordre.
public boolean sameContents(Car c) {
ArrayList<String> other_car = c; //error: Type mismatch:
//cannot convert from Car to ArrayList<String>
for (String c : this.parts) {
System.out.println(c);
for(String oc : other_car) {
//stuff
}
}
}
Il me semble avoir toutes sortes de problèmes avec celui-ci. Je ne peux pas obtenir le other_car
variable à être utilisé dans une boucle foreach.
Le second qui doit être fait est transferContents
.
Il est appelé comme:
car1.transferContents(car2);
qui transfère les éléments de car2
en car1
, puis les feuilles car2
vide. Je n'arrive pas à obtenir le ArrayList
à travailler à nouveau dans une boucle foreach qui est, je pense, ce dont j'ai besoin.
public void transfer(Car c) {
//code for transfer method.
//this.parts is the arraylist of car parts
for (Car c: c) {
this.parts.add(c);
}
//not sure how to set car2 to empty...
}
Quelle erreur avez-vous à partir de 'sameContents" la méthode exacte de la trace de la pile. Si il nullpointer exception puis aussi nous montrer comment est le paramètre C peuplée avant, il est passé en. Pourquoi êtes-vous en boucle".parties".
Ok c'est parce que other_car a 'Voiture' objets 'String' objets.Le changement "(Chaîne oc : other_car) " à " (Voiture oc : other_car)'
n'a pas de sens "other_car a 'Voiture' objets pas de Chaîne..." nous n'avons toujours aucune idée de ce qu'est une Voiture de classe, à ce qu'elle s'étend, ou ce qu'il contient.
Plein D'Anguilles Oui je suis d'accord. Drew, votre question a le potentiel pour être très délicieux, ce qui fait partie de la raison pour laquelle beaucoup d'entre nous sont ici 🙂 mais comme Hover dit nous avons besoin de l'image complète. J'ai d'abord pensé à votre voiture objet a le tableau, mais le lire à nouveau, je vous ai trouvé, dit-il, est le tableau. Veuillez ajouter l'ensemble de la classe de voiture ici. Est-il étendre ArrayList?
OriginalL'auteur Drew Bartlett | 2011-09-19
Vous devez vous connecter pour publier un commentaire.
Donné quelques
List<T> foo
, les boucles foreach, par exemple:sont juste une abréviation de la syntaxe de ce langage:
Pour vérifier qu'il y a plus d'éléments dans la liste, vous appelez
iter.hasNext()
, pour récupérer l'élément suivant, vous appeleziter.next()
.À pied de deux listes peut être fait en gardant autour de 2 itérateurs, en vérifiant que les deux itérateurs ont plus d'éléments, puis la récupération de ces éléments. Nous pouvons éliminer certaines conditions aux limites sur la longueur différente des listes en se rendant compte que la longueur différente des listes ne peut pas contenir les mêmes éléments (depuis une liste a de plus que les autres).
À partir de votre description, il semble que
Car
contient une propriétéList<String> parts;
, de sorte que nous pouvons formuler une solution:Comme pour votre
transferContents
méthode, vous avez la bonne idée, mais vous ne pouvez pas effectuer une itération sur lesCar
, vous devez effectuer une itération sur lesList<String> parts
. Pour supprimer des éléments individuels, vous pouvez utiliserremove()
méthode, appelée comme laadd
méthode, ou pour supprimer tous les éléments, vous pouvez appelerclear()
Mettre cela ensemble:
OriginalL'auteur Mark Elliot
Vous pouvez compter sur l'api java pour faire tout ce que vous avez besoin.
La liste de tableaux méthode equals vérifie pour l'ordre tout en comparant les deux listes.
Vous pouvez utiliser le removeAll() et addAll() méthodes pour transférer du contenu à l'.
OriginalL'auteur shams
Votre voiture ne devrait pas être une liste de tableau, mais ont. E. g. quelque chose comme ceci:
Alors votre
sameContents
méthode peut simplement appeler les listes de.equals()
méthode pour faire la comparaison:De même, pour le transfert de pièces à partir d'une voiture, d'utiliser les méthodes de la liste
add
les pièces de votre liste, puisclear
l'autre liste.OriginalL'auteur Paŭlo Ebermann