Taille d'arraylist [Résolu/Fermé]

Signaler
Messages postés
172
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
14 décembre 2010
-
Messages postés
172
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
14 décembre 2010
-
Bonjour,

Je voudrais savoir si c'est possible de connaitre la taille d'une arraylist?

Merci d'avance

Titfofol

16 réponses

Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 492
Au milieu d'un for, il faut une condition, ce qui correspond à une expression booléenne ;-)
for (i=0; i < TouteLigne.size();i++){...}

i < TouteLigne.size() retournera true ou false.
6
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60769 internautes nous ont dit merci ce mois-ci

Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 492
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 492
Un exemple:
ArrayList<Integer> ar = new ArrayList<Integer>();

ar.add(1);
ar.add(2);

System.out.println(ar.size()); // affiche 2

for (int i = 0; i < ar.size(); i++) {
    System.out.println(ar.get(i));
} // Affichera 1 puis 2
Quel feuilleton, j'ai cru qu'on en finirait jamais; ce fût palpitant et quel bilan !
- 25 échanges en 2 heures
- un échange courtois,
- un heureux happy end.
Je n'ai qu'une chose à dire: messieurs, chapeau bas !
Bonne nuit à tous.
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 492
:-)
Messages postés
172
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
14 décembre 2010
9
Et oui, ce fut court, claire et conçit et tout cela grâce... à Kilian ;;) un post parfait quoi...

Cordialement

Titfofol
Messages postés
172
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
14 décembre 2010
9
Bonjour Kilian,

Merci pour ton site mais bon, je ne comprends pas trop l'anglais et même avec un site de traduction je n'y arrive pas... tu peux m'éclairer un peu plus s'il te plait

Merci d'avance

Titfofol
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 492
Que tu comprennes l'anglais ou pas, c'est juste qu'il faut utiliser la méthode size() de ArrayList ;-)
Messages postés
172
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
14 décembre 2010
9
Bha je ne comprends pas alors...

J'ai fait un petit programme en utilisant le size() mais il me met une erreur...

Pourrais-tu m'aider?

for (i=1;TouteLigne.size();i++){...}


il me souligne TouteLigne.size(), c'est normal?!

l'erreur est : "Type mismatch: cannot convert from int to boolean"

cordialement

titfofol
Messages postés
172
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
14 décembre 2010
9
a nooonn... Elle était carément bête mon erreur... Merci de m'avoir éclairé..

Mais je peux te demander juste une autre question sur les arraylist? comment je pourrais faire pour mettre une ligne de mon arraylist dans une variable de type string?

moi j'ai mit :
String Ligne = TouteLigne[i];


mais ca ne fonctionne pas je pense qu'il faudrait une formule du genre TouteLigne.QuelqueChose non?!

Merci d'avance

Cordialement

Titfofol
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 492
Ca dépend, il est de quel type ton ArrayList ?
Messages postés
172
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
14 décembre 2010
9
ha bon o_o, il y a diférent type d'arrayList?

bha je ne sais pas (désolé je débute en java) en tout cas dans mon arraylist il y a des information que j'ai récupéré dans un fichier. ensuite je réinjecterait le tout dans une BDD...

Titfofol
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 492
Tu l'as déclaré comment en fait?

Un arraylist peut être générique:
ArrayList ar = new ArrayList()

En ce cas il contiendra des objets de type "Object".

Sinon tu peux lui dire qu'il contiendra des objets d'un type particulier:
ArrayList<String> ar = new ArrayList<String>();

On appelle ça un template, c'est à dire une classe, généralement un conteneur d'éléments comme les arraylist, qui prend un type en paramètre: le types de ses éléments.

Si ton arraylist est générique, alors il faut d'abord vérifier le type de ton élément pour être sûr que c'est un String (à moins que tu en sois vraiment sûr):
ArrayList ar = new ArrayList()
ar.add("prout");
if (ar.get(0) instanceof String)
    String pe = (String)ar.get(0); // <-- Il faut le caster de Object vers String

Mais là comme on est sûr que c'est un String, on peux éviter ce test de instanceof (mais le cast reste obligatoire)

Par contre si c'est un arraylist de String, pas du tout besoin de faire un test ni de cast, tu es sûr qu'il n'y a que des String dedans:
ArrayList<String> ar = new ArrayList<String>();
ar.add("prout");
String pe = ar.get(0);


C'est utile d'avoir un ArrayList générique (tous les types d'objets héritent de Object en java, donc tous les objets sont des Objects) pour stocker des éléments divers dont on se fout éperdument du type. Tu peux mettre des entiers, des String, des chaussettes.
Mais c'est pas terrible pour récupérer ses valeurs puisqu'il faut vérifier leur type (instanceof) et caster.

Avoir des arraylist typés permet de moins se prendre la tête.
Tu comprends?
Enfin en même temps je t'explique ça mais si ça se trouve tu débutes et tu n'as pas encore beaucoup vu l'orienté objet... Donc ça doit te paraître flou, ce qui est normal je te rassure ;-)
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 492 >
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016

Prends garde!! Je viens d'éditer mon message, j'avais oublié les cast. Pauvre fou que je suis....
Messages postés
172
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
14 décembre 2010
9
un arrayList ce n'est pas juste un objet?
Messages postés
172
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
14 décembre 2010
9
oui bha en fait on a vu la programmation orienté objet mais bon comme tu l'as dit c'est encore un peu flou... on a pas encore eut le déclic dans la tête...

alors, en fait mon ArrayList est un ArrayList simple, un ArrayList generique (pour employer les bons thermes).

Par contre dans mon fichier (les valeurs que j'ai inséré dans l'ArrayList) sont alphanumérique, donc ça veux dire que c'est concidéré comme un String? non?! ca veux dire que ma variable Ligne est bien déclarée? oui?!

Cordialement

Titfofol
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 492
Ben...ça dépend comment tu as lu ton fichier, si c'est un StreamReader ou je sais plus quoi :-DD
Ah c'est drôle hein le java? ;-)
Messages postés
172
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
14 décembre 2010
9
Les cast c'est quoi c'est quand tu castes une variable? c'est à dire quand tu veux passer de int à String par exemple?
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 492
Tout à fait, sauf que t'as pas le droit de le faire de int à String.
Si tu veux passer de String à int:
String p = "10";
int dix = Integer.parseInt(p);

Si tu veux passer de int à String:
int dix = 10;
String p = String.format("%d", dix);
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 492 >
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016

Les cast sont en fait autorisés entre objet papa/fiston (ou maman/fifille).
Prenons un exemple que j'aime bien: le médecin et le pédiatre.

Un pédiatre est un médecin, mais un médecin n'est pas necessairement un pédiatre:

class Medecin {
    //Gnagnagna, bon on va pas se taper l'implémentation de 8 ans de médecine
}

class Pediatre extends Medecin { //Pediatre hérite de médecin, eh oui un pediatre est un medecin specialisé
    //Bidibadabloupbloup, encore moins pour les 12 ans de pédiatrie
}

//....plus tard dans le code

Medecin m = new Pediatre(); //Un pédiatre est un médecin, rappelle toi
Pediatre p = (Pediatre) m; //Tu as le droit ce médecin en question en question est bien un pédiatre

Pediatre p2 = new Medecin(); //Houlaaa, interdit!! N'importe quel médecin ne peut pas se considérer comme pédiatre

Medecin m = new Psychiatre(); //Un psychiatre est un médecin, ça marche
Pediatre p3 = (Pediatre)m; //Pas bieeeen, un psychiatre n'est pas pédiatre, à moins qu'il soit pédospychiatre mais bon, ne compliquons pas les choses....

Voilà les casts peuvent se faire dans ce genre de condition. Mais les int et les String ne peuvent pas se caster entre eux, il ne sont pas de la même famille.
Messages postés
172
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
14 décembre 2010
9 >
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016

oui oui, je comprend tout à fait ce que tu veux dire, mais pourquoi à près tu as donné une formule pour pouvoir passer d'int en String?!
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 492 >
Messages postés
172
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
14 décembre 2010

Ben ça pourra te servir pour plus tard ;-)
Messages postés
172
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
14 décembre 2010
9
Bon alors atttend


voila ma class LectureFichier (qui me met une erreur au niveau --> Traitement(Chaine);
package pf.cps.datasemp;

import java.io.*;
import java.util.ArrayList;
import pf.cps.datasemp.TraitementFichier;

public class LectureFichier {
	public static void main(String[] args) {
		//Initialise les variables Chaine et Fichier
		ArrayList Chaine = new ArrayList();
		String Fichier = "T00.ISO";

		//lecture du fichier texte
		try{
		//Ouvre le fichier T00.ISO
		InputStream Ips = new FileInputStream(Fichier);
		//Lit le fichier en séquence
		InputStreamReader Ipsr = new InputStreamReader(Ips);
		BufferedReader Br = new BufferedReader(Ipsr);
		String Ligne;
		while ((Ligne = Br.readLine()) != null){
			System.out.println(Ligne);
			//Chaine += Ligne + "\n";
			Chaine.add(Ligne);

		}
		Traitement(Chaine);
		Br.close();
		}
		catch (Exception e){
			System.out.println(e.toString());
		}
	}
}




puis ma class TraitementFichier :
package pf.cps.datasemp;

import java.util.*;

public class TraitementFichier {
	public static void main(String[] args) {

	}

	public static void Traitement(ArrayList TouteLigne){
		for (int i = 1; i < TouteLigne.size(); i ++){
			String Ligne = TouteLigne[i];
			StringTokenizer Mot = new StringTokenizer(Ligne,"|");
			ArrayList Liste = new ArrayList();
			while(Mot.hasMoreTokens()){
				Liste.add(Mot.nextToken());
				//System.out.println(Mot.nextToken());
			}
		}
	}
}
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 492
Effectivement le readline() des classes de type Reader retournent des chaines.
Donc c'est bon:
public static void Traitement(ArrayList TouteLigne){
		for (int i = 0; i < TouteLigne.size(); i ++){
			String Ligne = (String)TouteLigne.get(i);
			StringTokenizer Mot = new StringTokenizer(Ligne,"|");
			ArrayList Liste = new ArrayList();
			while(Mot.hasMoreTokens()){
				Liste.add(Mot.nextToken());
				//System.out.println(Mot.nextToken());
			}
		}
	}

J'ai mis en gras les lignes changées, pas grand chose. (oublie pas ma petite leçon de médecine au dessus).
Par contre j'ai pas compris le coup du tokenizer...
Messages postés
172
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
14 décembre 2010
9
waw SUPER!!!
Mais pourquoi tu as fais démarer à 0 et non à 1?


et l'erreur dans ma classe LectureFichier y est toujours...

Traitement(Chaine);

l'erreur est : The method Traitement(ArrayList) is undefined for the type LectureFichier

pourquoi? il dit que je n'ai pas déclarer la classe pour la methode Traitement??? Et pourtant si :
import pf.cps.datasemp.TraitementFichier;
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 492
Tu l'as importé certes, ce qui signifie que cette classe est à portée, accessible.
Mais tu n'y accèdes pas.

En faisant Traitement(TouteLigne), java va chercher une méthode dans la classe courante (LectureFichier) qui s'appelle Traitement.
Or y'en a pas.

Traitement est une méthode de la classe traitementFichier:
package pf.cps.datasemp;

import java.io.*;
import java.util.ArrayList;
import pf.cps.datasemp.TraitementFichier;

public class LectureFichier {
	public static void main(String[] args) {
		//Initialise les variables Chaine et Fichier
		ArrayList Chaine = new ArrayList();
		String Fichier = "T00.ISO";

		//lecture du fichier texte
		try{
		//Ouvre le fichier T00.ISO
		InputStream Ips = new FileInputStream(Fichier);
		//Lit le fichier en séquence
		InputStreamReader Ipsr = new InputStreamReader(Ips);
		BufferedReader Br = new BufferedReader(Ipsr);
		String Ligne;
		while ((Ligne = Br.readLine()) != null){
			System.out.println(Ligne);
			//Chaine += Ligne + "\n";
			Chaine.add(Ligne);

		}
		TraitementFichier.Traitement(Chaine);
		Br.close();
		}
		catch (Exception e){
			System.out.println(e.toString());
		}
	}
}
Messages postés
172
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
14 décembre 2010
9
MERCI, MERCI, MERCI BEAUCOUP!!!! (je sais que je flood mais bon, je suis trop contente... tu as réussit à débloquer mon bout de programme merci encore Kilian

Passe une bonne nuit ou une bonne journée

Cordialement

Titfofol

PS : ton exemple avec les médecins trop top
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 492
Mais ce fût un plaisir :-)