ArrayList - JAVA

Résolu/Fermé
Tsquare Messages postés 25 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 2 mai 2017 - 26 déc. 2008 à 10:21
Tsquare Messages postés 25 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 2 mai 2017 - 26 déc. 2008 à 17:33
Bonjour,

Je vous expose mon problème:

J'ai des ArrayList d'ArrayList imbriqués ( ex: [ string, [Arraylist_d'ArrayList], [Arraylist], [ArrayList_d'ArrayList_d'ArrayList], string] ) et je souhaiterais n'avoir qu'un Arraylist.

Pour cela j'ai écrit une petite fonction mais quand je l'éxécute, j'ai un message d'erreur :

Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.util.ArrayList

et je ne comprend pas d'où il vient. Je vous donne mon code au cas où vous pourriez m'aidez...

import java.util.ArrayList;
public class fonction {
	
	public static ArrayList aplatir (Object test){
		
		ArrayList resultat_final = new ArrayList();
		
		for (int i = 0; i<((ArrayList) test).size();i++)
		{
			if ((( (ArrayList) ((ArrayList) test).get(i)).size()>1)) 
			{aplatir( ((ArrayList) test).get(i));}
			else 
			{resultat_final.add(((ArrayList) test).get(i));}
			
		}
		System.out.println(resultat_final);
		return resultat_final;
	}
}


Mon test est un "ArrayList imbriqué" et je voudrais mettre toutes les informations de test dans un ArrayList simple resultat_final.

Merci d'avance.
A voir également:

3 réponses

scriptiz Messages postés 1424 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 14 septembre 2023 425
26 déc. 2008 à 17:28
Essaye peut-être d'utiliser le "instanceof" pour tester si ton objet est bien de type ArrayList.

public class InstanceOfExample
{
	public static java.util.Scanner scanner = new java.util.Scanner(System.in);

	public static void main(String[] args)
	{
		String testeur = "bonjour";
		
		// vérifions si ma variable testeur est un String
		// testeur est bien de type String
		if(testeur instanceof String)
			System.out.println("testeur == String");
		else
			System.out.println("testeur != String");
			

		// vérifions maintenant si ma variable scanner est un String	
		// le scanner est de type Scanner et donc n'est pas un String
		if(scanner instanceof String)
			System.out.println("scanner == String");
		else
			System.out.println("scanner != String");
	}
}
1
Tsquare Messages postés 25 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 2 mai 2017
26 déc. 2008 à 17:33
Je ne connaissais pas instanceof mais j'ai une petite idée de comment l'utiliser, merci beaucoup (c'est pas la première fois ;) ).
0
www.szawurski.com
26 déc. 2008 à 10:37
Visiblement le variable 'test' n'est pas du type 'ArrayList'. Par autre, si tu utilise toujours le variable 'test' comme ArrayTest, pourquoi ne le declare-tu comme tel dans la signature de la fonction? Tu n'aurais pas besoin de le "caster" a chaque fois quand tu l'utilise...
0
Tsquare Messages postés 25 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 2 mai 2017
26 déc. 2008 à 10:43
import java.util.ArrayList;
public class fonction {
	
	public static ArrayList aplatir (ArrayList test){
		
		ArrayList resultat_final = new ArrayList();
		
		for (int i = 0; i< test.size();i++)
		{
			if ( ((ArrayList) test.get(i)).size()>1) 
			{aplatir( (ArrayList) test).get(i);}
			else 
			{resultat_final.add(((ArrayList) test).get(i));}
			
		}
		System.out.println(resultat_final);
		return resultat_final;
	}
}


En déclarant la variable test en ArrayList sa donne ça mais le problème demeure...
0
scriptiz Messages postés 1424 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 14 septembre 2023 425
26 déc. 2008 à 11:28
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.util.ArrayList

Tu essaye de convertir un entier (Integer) en une ArrayList

Exemple pour avoir la même erreur :
import java.util.ArrayList;

public class test
{
	public static void main(String[] args)
	{
		ArrayList monTest = new ArrayList();
		monTest.add(1);
		System.out.println(monTest);
		// Jusque ici tout vas bien, normal !


		// Si je fait (ArrayList)1 ça ne compilera pas
		// Donc on va faire passer notre Integer par
		// Un Object plus générique sur lequel on
		// Peut appliquer un Cast (ArrayList)
		Object monObjet = new Integer(4);
		monTest = (ArrayList)monObjet;
		
		// Ca compile, mais erreur à l'execution :
		/*
			Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.util.ArrayList
			at test.main(test.java:11)
		*/
	}
}


Si tu ne vois pas ce qui pourrait contenir un entier dans ton code et que tu caste en ArrayList, fait un debug Step by Step ou alors met des points d'arrêts dans ton code pour voir ce que valent tes variables a différents moments de l'éxecution.
0
Tsquare Messages postés 25 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 2 mai 2017
26 déc. 2008 à 17:23
En fait c'est au niveau de mon if que sa coince parceque mon (ArrayList) test.get(i)
n'est pas forcément un ArrayList mais je ne vois pas comment faire autrement.

Merci.
0