Java, ArrayList
Fermé
gaby10
Messages postés
445
Date d'inscription
vendredi 25 novembre 2005
Statut
Membre
Dernière intervention
3 février 2013
-
13 déc. 2011 à 17:55
gaby10 Messages postés 445 Date d'inscription vendredi 25 novembre 2005 Statut Membre Dernière intervention 3 février 2013 - 15 déc. 2011 à 17:32
gaby10 Messages postés 445 Date d'inscription vendredi 25 novembre 2005 Statut Membre Dernière intervention 3 février 2013 - 15 déc. 2011 à 17:32
A voir également:
- Java, ArrayList
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Java décompiler - Télécharger - Langages
- Waptrick jeux pes 2016 java - Forum logiciel systeme
3 réponses
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
13 déc. 2011 à 18:22
13 déc. 2011 à 18:22
les noeuds peuvent avec les memes valeurs ???
Pourquoi tu fais myArray.clear(); à chaque fois ? C'est ça qui te coince !
De plus que penserais-tu de faire une ArrayList<ArrayList<String>> ?
Pourquoi tu fais myArray.clear(); à chaque fois ? C'est ça qui te coince !
De plus que penserais-tu de faire une ArrayList<ArrayList<String>> ?
gaby10
Messages postés
445
Date d'inscription
vendredi 25 novembre 2005
Statut
Membre
Dernière intervention
3 février 2013
58
13 déc. 2011 à 18:34
13 déc. 2011 à 18:34
ArrayList<ArrayList<String>> ?
Et comment pourrais l'implementer
Je vois l'approche un arrayList dynamique?
Et comment pourrais l'implementer
Je vois l'approche un arrayList dynamique?
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
13 déc. 2011 à 18:50
13 déc. 2011 à 18:50
ArrayList<ArrayList<String>> myArray = new ArrayList<ArrayList<String>>(myTab.length); for (int i=0; i<myTab.length; i++) { ArrayList<String> ligne = new ArrayList<String>(myTab[i].length); for(int j=0; j<myTab[i].length; j++) ligne.add(myTab[i][j]); myArray.add(ligne); }
Ensuite au lieu de faire myTab[i][j], tu fais myArray.get(i).get(j), mais j'avoue que l'intérêt me paraît limité, qu'est-ce que tu gagnes à représenter tes données comme cela plutôt qu'en tableau ?
gaby10
Messages postés
445
Date d'inscription
vendredi 25 novembre 2005
Statut
Membre
Dernière intervention
3 février 2013
58
13 déc. 2011 à 19:01
13 déc. 2011 à 19:01
Si si en tableau c'est fait disons dans une matrice NxN. La difficulte ici est de pouvoir parcourir toute la matrice et determiner en fonction des donnees du tableau , le plus court chemin de l'index matrice[0][0] a la fin matrice[N-1][N-1]. A priori y a pas d'algorithme du genre Djistra pour une matrice a moins de transformer la martice en graphe mais pr des raisons citees plus haut. Les noeuds du graphe doivent etre de valeur differentes donc cette solution est proscrite. je pensais a mettre un ArrayList question d'avoir List(index,[i][j]) et faire un calcul dessus
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
Modifié par KX le 13/12/2011 à 19:17
Modifié par KX le 13/12/2011 à 19:17
Le truc c'est qu'il n'y a aucune différence entre ton tableau myTab, et la liste myArray, certes elles ne sont pas structurellement identiques, mais il n'y a pas d'informations supplémentaires en plus.
Tout ce que tu pourras calculer sur myArray, tu peux le calculer directement sur myTab.
"Y a pas d'algorithme du genre Djistra pour une matrice", ça dépend, c'est quoi que tu appelles "matrice" ici ? À quoi correspondent les valeurs de ton tableau/matrice ? Est-ce que c'est la matrice d'adjacence d'un graphe à n noeuds (le poids des n² aretes) ? Ou alors le poids de chacun des n² noeuds du graphe (avec 2n(n-1) aretes) ? Si on peut se ramener à un graphe on peut utiliser Dijkstra sans problème (à condition que les poids soient positifs) !
Tout ce que tu pourras calculer sur myArray, tu peux le calculer directement sur myTab.
"Y a pas d'algorithme du genre Djistra pour une matrice", ça dépend, c'est quoi que tu appelles "matrice" ici ? À quoi correspondent les valeurs de ton tableau/matrice ? Est-ce que c'est la matrice d'adjacence d'un graphe à n noeuds (le poids des n² aretes) ? Ou alors le poids de chacun des n² noeuds du graphe (avec 2n(n-1) aretes) ? Si on peut se ramener à un graphe on peut utiliser Dijkstra sans problème (à condition que les poids soient positifs) !
gaby10
Messages postés
445
Date d'inscription
vendredi 25 novembre 2005
Statut
Membre
Dernière intervention
3 février 2013
58
13 déc. 2011 à 19:41
13 déc. 2011 à 19:41
Bien voici un exemple
J'ai cette tableau de taille 9
Mon algorithme doit me calculer et me retourner le plus court chemin de 1 ([0][0] ) a 4 ([8][8]) et donc
(0,0)
(0,1)
(2,2)
(3,2)
(3,3)
dans le cas actuel. C'est donc cet alogorithme ke je cherche a implementer.
1 0 4 8 7 8 5 5 4
J'ai cette tableau de taille 9
Mon algorithme doit me calculer et me retourner le plus court chemin de 1 ([0][0] ) a 4 ([8][8]) et donc
(0,0)
(0,1)
(2,2)
(3,2)
(3,3)
dans le cas actuel. C'est donc cet alogorithme ke je cherche a implementer.
gaby10
Messages postés
445
Date d'inscription
vendredi 25 novembre 2005
Statut
Membre
Dernière intervention
3 février 2013
58
13 déc. 2011 à 19:45
13 déc. 2011 à 19:45
i'idee est de mettre les valeurs dans une ArrayList du genre
Pour pouvoir utiliser Djistra
myArray("Node_"+i+","+j,myTab[i][j])et ensuite les envoyer dans un graphe
myGraph.addNode("Node_"+i+","+j);
Pour pouvoir utiliser Djistra
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
15 déc. 2011 à 14:23
15 déc. 2011 à 14:23
Il faut que tu apprennes à découper ton code en partie indépendante autant que tu le peux, par exemple ici tu fais la génération aléatoire de la matrice, la création du fichier, et la création du graphe, tout ça dans la même méthode alors que les traitements sont très fortement distincts.
Pour la partie graphe en elle même, j'ai mis quelques commentaires pour t'y retrouver, mais c'est assez simple à comprendre je pense.
Remarque : j'ai supprimé, ton ArrayList car il ne sert à rien, le tableau suffit.
Pour la partie graphe en elle même, j'ai mis quelques commentaires pour t'y retrouver, mais c'est assez simple à comprendre je pense.
Remarque : j'ai supprimé, ton ArrayList car il ne sert à rien, le tableau suffit.
import org.graphstream.graph.Edge; import org.graphstream.graph.Node; import org.graphstream.graph.implementations.SingleGraph; import java.io.FileWriter; import java.io.IOException; import java.util.Random; public class FileManage { private final SingleGraph myGraph; private final int[][] myTab; public FileManage(int dim,String fileName) { myTab = createMatrix(dim,0,9); saveMatrix(dim,myTab,fileName); myGraph = createGraph(dim,myTab,"My Graph"); myGraph.display(false); } public static int [][] createMatrix(int dim, int minValue, int maxValue) { int[][] myTab= new int[dim][dim]; Random rd = new Random(); for (int i=0; i<dim; i++) for (int j=0; j<dim; j++) myTab[i][j] = rd.nextInt(maxValue+1-minValue)+minValue; return myTab; } public static boolean saveMatrix(int dim, int[][] mat, String fileName) { try { String endl = System.getProperty("line.separator"); FileWriter filew = new FileWriter(fileName); for(int i=0; i<dim; i++) { for(int j=0; j<dim; j++) filew.write(mat[i][j]+"\t"); filew.write(endl); } filew.close(); return true; } catch (IOException e) { System.err.println(e); return false; } } private static String ID(int i,int j) { return "("+i+","+j+")"; } private static String ID(int i1,int j1,int i2,int j2) { return ID(i1,j1)+"-"+ID(i2,j2); } public static SingleGraph createGraph(int dim, int[][] mat, String graphName) { SingleGraph g = new SingleGraph(graphName); // création des noeuds //-------------------- for (int i=0; i<dim; i++) for (int j=0; j<dim; j++) { String id = ID(i,j); Node n = g.addNode(id); n.addAttribute("xyz",j,-i,0); // la position du noeud dans l'espace n.addAttribute("val",mat[i][j]); // le poids du noeud n.addAttribute("label",id+"["+mat[i][j]+"]"); // l'étiquette du noeud pour l'affichage // un noeud normal en noir n.setAttribute("ui.style","size:8px; fill-color:black; text-color:black; text-size:12px;"); } // le noeud de départ en vert g.getNode(ID(0,0)).setAttribute("ui.style","size:10px; fill-color:green; text-color:green; text-size:12px;"); // le noeud d'arrivée en rouge g.getNode(ID(dim-1,dim-1)).setAttribute("ui.style","size:10px; fill-color:red; text-color:red; text-size:12px;"); // création des arêtes //-------------------- for (int i=0; i<dim; i++) for (int j=0; j<dim; j++) { // arete horizontale if (j<dim-1) { Edge e = g.addEdge(ID(i,j,i,j+1),ID(i,j),ID(i,j+1)); e.setAttribute("ui.style","size:1px; fill-color:black;"); } // arete verticale if (i<dim-1) { Edge e = g.addEdge(ID(i,j,i+1,j),ID(i,j),ID(i+1,j)); e.setAttribute("ui.style","size:1px; fill-color:black;"); } } return g; } public static void main(String...args) { new FileManage(5,"C:\\fichier.txt"); } }
gaby10
Messages postés
445
Date d'inscription
vendredi 25 novembre 2005
Statut
Membre
Dernière intervention
3 février 2013
58
15 déc. 2011 à 17:32
15 déc. 2011 à 17:32
Merci KX,
Je teste le code tout de suite et te reporte.
Je teste le code tout de suite et te reporte.