Précédent   Forum des professionnels en informatique > Java > Général Java > Langage
Langage Forum d'entraide sur le langage Java et autres langages pour la JVM : syntaxe, POO, conventions, API standard. Avant de poster -> FAQ Java
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/01/2012, 11h47   #1
Futur Membre du Club
 
Inscription : novembre 2009
Messages : 57
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 57
Points : 15
Points : 15
Par défaut Problème removeRange méthode non visible

Bonjour,

Je crée une ArrayList et ensuite j'essaie d'appliquer la méthode removeRange

La compliation m'indique que la méthode n'est pas visible et je ne parviens pas à trouver la solution

Merci de me répondre
Voici le code

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package collections_Huchard;
 
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.Random;
import java.util.Vector;
 
class Chevre 
{
	int nombre;
	int longueur;
	Chevre (int i, int j)
	{
	nombre = i;
	longueur = j;
	}
 
	public String toString(){
	return "Chevre :"+nombre+":"+longueur;
	}
}
 
public class List_Array_List	
{
	public static void main(String[] args)
	{
	ArrayList <Chevre> c = new ArrayList<Chevre>();
	Random r = new Random();
	for (int i=0;i<10;i++)
	c.add(new Chevre(r.nextInt(100),r.nextInt(10)));
 
	System.out.println("Collections non triée");
	for(int i=0; i<c.size();i++)
	System.out.println(i + " " +((Chevre) c.get(i)).nombre+":"+((Chevre) c.get(i)).longueur);  // Ok ne sert pas de toString()
	//System.out.println(i + " " +((Chevre) c.get(i)));   // Ok se sert de toString()
 
	//Methode removeRange
	//-------------------
	c.removeRange(3,8);
 
	}
}
 
/*
 
*/
michelp3 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 12h01   #2
Modérateur
 
Avatar de Robin56
 
Homme Nicolas
Ingénieur développement logiciels
Inscription : juin 2009
Messages : 1 714
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : juin 2009
Messages : 1 714
Points : 4 835
Points : 4 835
La méthode removeRange est une méthode de niveau de visibilité "protected". Tu peux l'utiliser en procédant de cette manière :
1. Créer une classe A étendant ArrayList
2. Utiliser cette classe A à la place d'une ArrayList
3. Utiliser removeRange sur la classe A

En tout cas, utilise plutôt la méthode subList. Tu peux en voir un exemple sur ce fil.
__________________
Robin56 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 13h13   #3
Futur Membre du Club
 
Inscription : novembre 2009
Messages : 57
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 57
Points : 15
Points : 15
Ok merci explication claire mais lacune de ma part

class Chevre extends ArrayList : OK

mais comment remplir Chevre avec un ArrayList : ?

Chevre c = new ArrayList(); NOT OK
michelp3 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 14h16   #4
Modérateur
 
Avatar de Robin56
 
Homme Nicolas
Ingénieur développement logiciels
Inscription : juin 2009
Messages : 1 714
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : juin 2009
Messages : 1 714
Points : 4 835
Points : 4 835
Citation:
Envoyé par michelp3 Voir le message
Ok merci explication claire mais lacune de ma part

class Chevre extends ArrayList : OK

mais comment remplir Chevre avec un ArrayList : ?

Chevre c = new ArrayList(); NOT OK
Voici ce que je te proposais comme solution :

1. Utiliser removeRange()
Code :
1
2
3
4
5
6
7
8
9
10
// Création
public class ArrayListCustom extends ArrayList {
  public void removeRange(int fromIndex, int toIndex) {
    super.removeRange(fromIndex, toIndex);
  }
}
 
// Utilisation
ArrayListCustom array = new ArrayListCustom();
array.removeRange(3,8);
2. Utiliser subList()
Code :
1
2
ArrayList array = new ArrayList();
array.subList(3, 8).clear();
Dans tout les cas, si removeRange est "protected", ceci doit signifier qu'il est déconseillé de l'utiliser.
__________________
Robin56 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/01/2012, 14h27   #5
Expert Confirmé Sénior
 
Inscription : septembre 2004
Messages : 5 093
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 093
Points : 7 019
Points : 7 019
Citation:
Envoyé par Robin56 Voir le message
Dans tout les cas, si removeRange est "protected", ceci doit signifier qu'il est déconseillé de l'utiliser.
Pas déconseillé, inutile.
Le système de collections de Java a déjà prévu un truc pour traiter des intervalles de List, quelles qu'elles soient (ArrayList, LinkedList, emptyList(), singletonList(), Arrays.asList(), tout.)

Ce truc, c'est subList(). Il est inutile d'avoir autre chose.
(Et il est vrai que les choses inutiles sont génératrices d'erreurs, ce qui, du coup, est ma foi déconseillé.)
thelvin est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 16h34   #6
Futur Membre du Club
 
Inscription : novembre 2009
Messages : 57
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 57
Points : 15
Points : 15
OK ca marche avec subList(3,8).clear();

mais pour remove(3,8);
rappel : au départ , je veux constituer une collection de Chevre pour l'occasion :
ArrayList <Chevre> c = new ArrayList<Chevre>();
J'ajoute des éléments ...
et je souhaite effacer les elements de 3 à 8

Tu extends la classe Chevre et tu redéfinis removeRange avec super
Jusque là OK mais

ta ligne ArrayListCustom array = new ArrayListCustom();

ne permet pas de constituer une collection
michelp3 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 16h47   #7
Modérateur
 
Avatar de Robin56
 
Homme Nicolas
Ingénieur développement logiciels
Inscription : juin 2009
Messages : 1 714
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : juin 2009
Messages : 1 714
Points : 4 835
Points : 4 835
Citation:
Envoyé par michelp3 Voir le message
OK ca marche avec subList(3,8).clear();
Ok, donc tu as ta solution.

Citation:
Envoyé par michelp3 Voir le message
mais pour remove(3,8); [...]

Tu extends la classe Chevre et tu redéfinis removeRange avec super
Jusque là OK mais

ta ligne ArrayListCustom array = new ArrayListCustom();

ne permet pas de constituer une collection
Je ne fais pas une surcharge de Chevre mais de ArrayList. C'est totalement différent. Pour être précis, j'aurais du également typer ma classe ArrayListCustom en conteneur de Chevre (ArrayListCustom<Chevre>) mais c'était pour l'exemple. Je t'indiquais qu'il était possible de créer une ArrayList avec des fonctionnalités supplémentaires. Après tu peux donc utiliser ArrayListCustom comme n'importe quelle ArrayList sauf qu'elle a la fonctionnalité supplémentaire "removeRange".
__________________
Robin56 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 12h12   #8
Futur Membre du Club
 
Inscription : novembre 2009
Messages : 57
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 57
Points : 15
Points : 15
Ok en fait : 3 class

1) class Chevre
2) public class ArrayListCustom extends ArrayList : a mettre en dehors
3) programme main
ArrayListCustom array = new ArrayListCustom();
ajouter des objets Chevre

Voilà: c'est tout
michelp3 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h07.


 
 
 
 
Partenaires

Hébergement Web