Tableaux Java pour la liste des personnes, l'âge et le poids [fermé]
J'ai une affectation qui utilise des tableaux mais je n'arrive pas à l'obtenir pour imprimer les résultats corrects. La consigne demande de créer une classe qui a des fonctions qui permettent à l'utilisateur :
1 - insérez un nom, un âge et un poids pour un nombre infini de personnes, jusqu'à ce que le nom "TERMINÉ" ait été entré.
2 - Il devrait pouvoir afficher tous les noms, âges et poids des peuples, triés du poids le plus léger au plus lourd.
3-L'utilisateur doit également pouvoir afficher l'âge et le poids d'une personne qu'ils recherchent (s'il existe).
Voici ce que j'ai obtenu jusqu'à présent:
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
ArrayList<Persons> peopleAr = new ArrayList<Persons>();
Persons ewPeople = new Persons();
ewPeople.name = "Peter";
ewPeople.age = 20;
ewPeople.weight = 70.0;
peopleAr.add(ewPeople);
for (int i = 0; i < peopleAr.size()+5; i++) {
System.out
.println("Enter the number of the action you'd like to preform:");
System.out.println("1. Add new profile.");
System.out.println("2. View all prfiles (lightest to heaviest).");
System.out.println("3. Search for a person.");
System.out.println("4. Exit.");
int key = kb.nextInt();
switch (key) {
case 1:
System.out
.println("Enter the required information. Enter 'finished' in the name field to "
+ "return to main menu. ");
Persons newPeople = new Persons();
newPeople.name = "abc";
while (!newPeople.name.equals("finished")) {
System.out.println("Enter name: ");
newPeople.name = kb.next();
System.out.println("Enter age: ");
newPeople.age = kb.nextInt();
System.out.println("Enter weight: ");
newPeople.weight = kb.nextDouble();
peopleAr.add(newPeople);
}
break;
case 2:
for (int j = 0; j < peopleAr.size(); j++) {
System.out.println(peopleAr.get(i) + " "
+ peopleAr.get(i) + " " + peopleAr.get(i + 2));
}
break;
case 3:
String nameTemp = "abc";
while (!nameTemp.equalsIgnoreCase("done")) {
System.out
.println("Enter the name you'd like to search. Enter 'done' to return to main menu. ");
nameTemp = kb.next();
boolean check = peopleAr.contains(nameTemp);
if (check = true) {
int p = peopleAr.indexOf(nameTemp);
System.out.println(peopleAr.get(p) + " "
+ peopleAr.get(p + 1) + " "
+ peopleAr.get(p + 2));
} else {
System.out
.println("There is no match for your search.");
}
}
break;
case 4:
System.exit(0);
}
}
}
}
Donc, La première partie fonctionne (sauf pour les petits bugs).
La deuxième partie ne renvoie pas les valeurs sous forme de chaîne. J'ai essayé d'utiliser la méthode toString()
et de convertir les objets en une chaîne avec une boucle mais aucun d'entre eux ne fonctionne. J'ai besoin d'aide pour afficher les objets sous forme de chaînes au lieu de "lab04.Personnes@14eac69".
La troisième partie a également quelques problèmes, mais je crois qu'ils sont liés au deuxième problème car le compilateur n'aimera probablement pas comparer des chaînes à des objets.
Je sais qu'il y a beaucoup de choses qui ressemblent à des ordures dans mon code, mais elles sont là pour maintenir les choses ensemble ou sinon j'aurais des erreurs. Je veux corriger les fonctions principales avant de ramasser les petits bugs et de nettoyer le code.
3 answers
Vous pouvez utiliser ArrayList
pour ajouter dynamiquement de nouveaux objets Person.
ArrayList vous donne un tas d'options utiles, par exemple:
- ajouter()
- get ()
- set ()
- taille()
- contient()
- ...
Donc, pour votre travail c'est comment vous pouvez atteindre votre objectif:
Demandez à l'utilisateur le nom, l'âge et le poids via
Scanner
ou via l'interface graphique. (Probablement avecSwing
). Un exemple d'utilisation de la classeScanner
peut être trouvé ici: Exemple de scanner . Ensuite, vous devez les envelopper dans une classe de modèle de données Person et ajouter cet objet à votreArrayList
.Pour trier le
ArrayList
créé en fonction des poids de la personne, vous devez implémenter unComparator
. Un exemple peut être trouvé ici: Exemple de comparateurEnfin, demandez à l'utilisateur la personne recherchée via
Scanner
et utilisez la méthode contains de votreArrayList
pour rechercher réellement l'objet. Vous pouvez toujours écrire le vôtre Méthodehash()
etequals()
pour contrôler le fonctionnement de la méthodecontains()
. Un exemple peut être trouvé ici: Recherche ArrayList exemple
Vous pouvez utiliser un objet List et la méthode add()
pour ajouter d'autres entités à cette liste.
Cependant, puisque vous devez ajouter plusieurs valeurs, vous devez créer une liste contenant d'autres listes, ou vous pouvez implémenter un autre type de structure bidimensionnelle.
Tout d'abord , définissez la classe people
public class People
{
public String name = "";
public int age ;
public double weight;
}
Deuxièmement, définissez une liste de personnes de classe
List <People> peopleArray = new ArrayList < People> ();
// create a new people
People newPeople = new People();
newPeople.name = "Peter";
newPeople.age = 20;
newPeople.weight = 70.0;
// add it to array
peopleArray.add(newPeople );