Yop. Je dois réaliser deux listes en Java.
Les deux peuvent contenir autant d'éléments que l'utilisateur le veut ( donc elles peuvent être aussi grande que le mec le souhaite ) et doit afficher un message indiquant à l'utilisateur combien d'éléments sa liste possède.
En gros si le mec entre 4 5 8 9 4 5 4 7 4 5 1 7 5 votre "votre liste contient 13 éléments ". Voilà, une liste composé de lettres et une autre composé de chiffres.
Je suis novice je suis largué. J'utilise quoi pour ça ?
Merci de m'éclairer !
Le but de ton truc est différent du mien mais vu que ça implique aussi une liste définie par l'utilisateur jette un œil ici :
https://www.jeuxvideo.com/forums/1-47-91174-1-0-1-0-java-instructions.htm
Va voir du coté des collections, je me bats avec depuis une heure mais c'est fait pour les listes justement ( enfin, adapté quoi ) ![]()
List, ArrayList, CopyOnWriteArrayList
CopyOnWriteArrayList dérive de ArrayList qui lui dérive de List.
CopyOnWriteArrayList permet de modifier les éléments (suppression, modifier, etc...) pendant que tu "itérites" la liste.
"itéres" ;)
J'ai beau lire et relire, je ne comprends pas les "deux listes".
L'utilisateur rempli une liste, puis tu affiche son nombre d'éléments, où est l'utilité de la seconde liste ?
Bunyan : En fait ça ça va c'est bon, l'utilisateur doit choisir entre les deux types de liste au début du programme ( j'ai instauré le choix avec un char "a" pour la liste impliquant des nombres et "b" pour la liste impliquant des lettres, c'est bon ) mais ensuite pour la liste en elle même je vois pas.
Shana : Ok, donc je dois me servir ce ça. Tu aurais un exemple ?
Comment récupère tu les éléments ? Arguments du programme ? Une boucle avec des input de 1 caractère jusqu'au caractère spécial qui permet de stopper la boucle ?
Ahhhhh.
D'accord, sans le contexte, difficile de saisir x)
Si tu dois bien faire : ajout des entrées utilisateurs dans une liste puis affichage de la taille => il te suffit d'une List (cf Javadoc).
Ok. Je pourrais voir un exemple d'utilisation ? Je n'ai jamais vu ces trucs. La Javadoc est en anglais, même si je comprends le sens global de tout ce qui touche à l'anglais je ne peux pas encore me permettre d'apprendre des choses ou d'essayer avec cette langue pour le moment, je passerai a coté de certains trucs.
Disons pour la liste de chiffres par exemple.
Je voudrais savoir quoi importe, quoi déclarer, quoi faire.
J'adapterai ensuite pour les lettres ( et tout le reste, vu qu'on va passer un certain temps sur des listes ). Tout bonnement.
Utilise ArrayList ( enfin en tout cas c'est ce que j'ai fait pour mon propre programme expliqué plus haut ). Tu n'as même pas à t'embêter avec tes deux types vu qu'ArrayList fonctionne aussi bien avec l'un comme l'autre ( bon à toi d'adapter oui ).
Un exemple :
--------------------
import java.util.ArrayList;
public class Exemple {
public static void main(String[] args) {
ArrayList al = new ArrayList();
al.add(2);
al.add("Ce truc fonctionne aussi");
al.add(3.0);
al.add('d');
for(int i = 0; i < al.size(); i++)
{
System.out.println("donnée à l'indice " + i + " = " + al.get(i));
}
}
}
----------------
Voilà.
j'ajoute 2 petit précision. Si tu veux parcourir juste ta liste sans te préoccupé des indice tu peux faire :
for (Object o : al) {
System.out.println(o)
}
tu peux faire une liste de ce que tu veux (mon vdd a fais une liste d'objet).
si tu veux faire une liste d'entier uniquement
ArrayList<Integer> al = new ArrayList<Interger>()
et pour le parcours :
for (Integer i : al) {
System.out.println(i)
}
avantage meilleur typage. En effet al.get(i) et le for retourne des Integer (plutot que des objet) ce qui te permet de les traiter comme des entier sans "Cast"
exemple :
ArrayList<Integer> al = new ArrayList<Interger>()
al.add(2);
int x = al.get(0) * 2
// x est égale a 4
Ok je commence à comprendre.
On met quoi, par contre, dans "<interger>" ?
C'est quoi, en fait ?
tu met <Integer> Si tu veux des entier <String> pour des chaine etc
En gros la syntaxe c'est <"Un objet">
je sais pas si tu a vue la programmation objet (avec java) ?
En gros int, float, (et d'autre) sont des type dit primitif ce ne sont pas des objet (ils n'étendent pas la class Objet de java).
Integer c'est comme un int sauf que c'est un objet (ça ce manipule de la même façon, tu peux additionné des int et des Integer, mettre un Integer dans un int etc)
Quand tu creer en java une classe c'est automatiquement un objet.
exemple
public class couple {
}
tu met <Integer> Si tu veux des entier <String> pour des chaine etc
En gros la syntaxe c'est ArrayList<"Un objet"> al = new ArrayList<"Un objet">()
je sais pas si tu a vue la programmation objet (avec java) ?
En gros int, float, (et d'autre) sont des type dit primitif ce ne sont pas des objet (ils n'étendent pas la class Objet de java). tu peux pas faire ArrayList<int>
En gros Integer c'est comme un int sauf que c'est un objet (ça ce manipule de la même façon, tu peux additionné des int et des Integer, mettre un Integer dans un int etc)
Quand tu crée en java une classe c'est automatiquement un objet.
exemple
public class Couple {
int x;
int y;
}
tu peux donc faire ArrayList<Couple> al = new ArrayList<Couple>()
@TommyVercittee : ce qui est entre chevron est un mécanisme de Java introduit dans Java 1.6 nommé "type générique". Au vu de tes connaissances actuelles, à mon avis, ce n'est pas le moment de les regarder.
Ouais je suis encore un gros novice, jusqu'à maintenant je gérais assez bien avec les variables conditions et boucles mais maintenant qu'on s'attaque à ce truc ( nan pas encore vu la progra objet ) je suis largué.
Bon. Mais il y a quelque chose que je ne comprends pas. Il est dit qu'ArrayList consiste en gros à un tableau sans taille définit ( en gros ) donc dans mon programme l'utilisateur devrait vraiment être libre d'entrer autant d'éléments qu'il le souhaite.
Alors pourquoi il y a ce : al.add()
Par exemple ? Dans mon code actuel, la saisie de l'utilisateur va entre ces deux parenthèses en gros. Mais comment faire en sorte qu'il y en ai une nouvelle qui se libère pour la saisi suivante ? Parce que sinon la valeur qui suivra remplacera celle tapée précédemment.
:/
( donc la liste ne sera jamais composé de plusieurs éléments mais d'un seul )
Bah non justement. .add(truc); permet d'ajouter un élément sans supprimer ceux précédents. Si tu veux changer, tu fais .set(index, nouvel objet);
.
Bien ! Donc voici mon programme-test ( un brouillon donc destiné à m’entraîner sur cette histoire d'ArrayList avant de m'occuper du programme qui m’intéresse ) :
-----------------
import java.util.Scanner;
import static java.lang.System.out;
import java.util.ArrayList;
public class New1 {
private static Scanner sc;
public static void main(String[] args) {
char reponse = 'O';
sc = new Scanner(System.in);
ArrayList<Integer> al = new ArrayList<Integer>();
out.print("Lancer le programme ? (O/N) : ");
reponse = sc.nextLine().charAt(0);
while (reponse == 'O')
{
out.print("=> ");
int a = sc.nextInt();
al.add(a);
}
}
}
----------------
Chaque saisie est prise en compte par le programme ?
Oui.
Tu peux vérifier ça par toi même si tu veux. Après "al.add(a);" ajoute :
for(Integer i : al) System.out.println(i);