Se connecter / S'enregistrer
Votre question

Problème d'inportation donnée d'un excel dans un tableau

Tags :
  • Java
  • Midi
  • Programmation
Dernière réponse : dans Programmation
23 Janvier 2012 11:20:49

Bonjour.

Je viens à vous car, j'ai besoin d'aide. Je dois réaliser pour la fin de cette après-midi un programme qui calcul le plus court chemin pour allez d'un point A a un point B. Je l'ai déjà réalisé.

Mon problème vient du fait que je souhaite pouvoir récupérer les distances entre les villes dans un excel pour les mettre dans mon tableau qui va être utilisé pour calculer le plus court chemin. J'ai arriver à lire les valeurs, mais j'arrive pas à les insérer dans mon tableau.
Donc j'ai besoin de vous pour résoudre mon problème.

Voila la partie du code qui me pose problème.
Qu'est ce que je dois faire pour que la valeur numb soit insérer dans le tableau tabF et tabFc ? (code problématique entre les ligne 88 et 109)

  1. import java.util.Scanner;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import jxl.*;
  5. import jxl.read.biff.BiffException;
  6.  
  7.  
  8.  
  9. public class GPS{
  10.  
  11. // fonction floydChemin qui calcule un itineraire à partir de la matrice d'adjacence des villes
  12. public int[] floydChemin(int[][] tab, int d, int a){
  13. int size = tab.length;
  14. int[][] inter = tab;
  15. int cpt = size -2;
  16. int [] result = new int[size];
  17. for(int i = 0; i<size; i++){
  18. result[i]=-10;
  19. }
  20.  
  21. for(int i = 0; i<size; i++){
  22. for(int j = 0; j<size; j++){
  23. result[0]=d;
  24. result[size-1]=a;
  25. if(inter[i][j] == -1){
  26. inter[i][j]=Integer.MAX_VALUE;
  27. }
  28. }
  29. }
  30. for(int k=0;k<size;k++){
  31. for (int i=0;i<size;i++){
  32. for (int j=0;j<size;j++){
  33. int ij = (inter[i][j]);
  34. int ikj= (inter[i][k]+inter[k][j]);
  35. if(i==d && j==a){
  36. if(ij>ikj && ij!=Integer.MAX_VALUE){
  37. result[cpt]=k;
  38. cpt--;
  39. }
  40. }
  41. inter[i][j]=Math.min(inter[i][j],inter[i][k]+inter[k][j]);
  42. }
  43. }
  44. }
  45. return result;
  46. }
  47.  
  48. // fonction floyd qui calcule la plus courte distance entre chaques villes
  49. //à partir de la matrice d'adjacence des villes
  50.  
  51. public int[][] floyd(int[][] tab){
  52. int size = tab.length;
  53. int[][] result = tab;
  54.  
  55. for(int i = 0; i<size; i++){
  56. for(int j = 0; j<size; j++){
  57. if(result[i][j] == -1){
  58. result[i][j]=Integer.MAX_VALUE;
  59. }
  60. }
  61. }
  62. for(int k=0;k<size;k++){
  63. for (int i=0;i<size;i++){
  64. for (int j=0;j<size;j++){
  65. result[i][j]=Math.min(result[i][j],result[i][k]+result[k][j]);
  66. }
  67. }
  68. }
  69. return result;
  70. }
  71.  
  72.  
  73. public static void main(String[] args) throws BiffException, IOException {
  74. //instanciation de la classe GPS
  75. GPS gps = new GPS();
  76.  
  77. //Choix du mode de voyage
  78.  
  79. Scanner sc= new Scanner(System.in);
  80. System.out.println("Bonjour");
  81. System.out.println("Veillez selectionner le mode de voyage. Tapez 1 pour le mode touristique et 2 pour le mode manuel");
  82. int mode= sc.nextInt();
  83.  
  84. if(mode==1) //Mode Touristique
  85. {
  86.  
  87. System.out.println("Vous avez sélectionner le mode touristique");
  88. int tabF[][] ={new int [7],new int [7]};
  89. int tabFc[][] ={new int [7],new int [7]};
  90.  
  91.  
  92. Workbook workbook = Workbook.getWorkbook(new File("tourisme.xls"));
  93.  
  94. for(int i = 1; i<7; i++){
  95. for(int j = 1; j<7; j++)
  96. {
  97.  
  98. Sheet Sheet = workbook.getSheet (0);
  99.  
  100. Cell a = Sheet.getCell(i,j);
  101. NumberCell nc = (NumberCell) a;
  102. double numb = nc.getValue();
  103. System.out.println((int)numb);
  104. tabF[i][j]= (int) numb;
  105. tabFc[i][j]= (int) numb;
  106.  
  107.  
  108. }
  109. }
  110.  
  111.  
  112. }
  113. else //Mode manuel
  114. {
  115. System.out.println("Vous avez sélectionner le mode manuel");
  116.  
  117. //Choix du nombre de villes
  118.  
  119. System.out.println("Veuiller saisir le nombre de villes:");
  120. int saisie= sc.nextInt();
  121.  
  122.  
  123. //Vérification de la nécéssité du GPS
  124.  
  125. if(saisie<=1)
  126. {
  127. System.out.println("Erreur le nombre de ville est inférieur à 2");
  128. System.out.println("Veuiller saisir un nombre de villes correct:");
  129. saisie= sc.nextInt();
  130. }
  131.  
  132. //Entrer la distance entre les villes
  133.  
  134.  
  135. int[][] tabF = new int[saisie][saisie];
  136. int[][] tabFc = new int[saisie][saisie];
  137.  
  138. for(int i = 0; i<tabF.length; i++){
  139. for(int j = 0; j<tabF.length; j++){
  140. if(tabF[j][i] != 0){
  141. tabF[i][j]=tabF[j][i];
  142. }else if(i==j){
  143. tabF[i][j]=0;
  144. }else if(tabFc[j][i] != 0){
  145. tabFc[i][j]=tabFc[j][i];
  146. }else if(i==j){
  147. tabFc[i][j]=0;
  148. }else{
  149. System.out.println("entrez la distance entre ville "+(i+1) +" et ville "+(j+1));
  150. saisie = sc.nextInt();
  151. tabF[i][j]=saisie;
  152. tabFc[i][j]=saisie;
  153. System.out.println("distance entre ville "+i+" et ville "+j+": "+tabF[i][j]);
  154. }
  155. }
  156. }
  157.  
  158. System.out.println("Vous avez rentré toutes les distance. Le calcul du meilleur iténéraire vas commencer.");
  159. System.out.println("Rentrer -2 pour quitter le GPS, 0 pour continuer...");
  160. int[][] distances=gps.floyd(tabF);
  161. while(sc.nextInt()!=-2){
  162. //ITINERAIRE
  163.  
  164. System.out.println("Veuiller saisir le numéro de la ville de départ:"); //choix départ
  165. int debut= sc.nextInt()-1;
  166.  
  167. System.out.println("Veuiller saisir le numéro de la ville d'arriver:"); //choix arriver
  168. int fin= sc.nextInt()-1;
  169. int[] itineraire = gps.floydChemin(tabFc, debut, fin);
  170. System.out.println("distance entre ville "+(debut+1) +" et ville "+(fin+1) +": "+distances[debut][fin]);
  171. System.out.println("meilleur itineraire : ");
  172. System.out.print("ville "+(itineraire[0]+1));
  173. for(int i = 1; i<itineraire.length; i++){
  174. if(itineraire[i]!=-10){
  175. System.out.print(" -> ville "+(itineraire[i]+1));
  176. }
  177. }
  178. System.out.println("");
  179. if(debut==fin) //Vérification erreur
  180. {
  181. System.out.println("Le GPS est inutil, c'est la même ville"); //gps inutil
  182. System.out.println("Rentrer -2 pour quitter le GPS "); //recommencer ou quitter
  183. int choix= sc.nextInt();
  184.  
  185.  
  186. }
  187. System.out.println("");
  188. System.out.println("Rentrer -2 pour quitter le GPS, 0 pour continuer..."); //recommencer ou quitter
  189.  
  190.  
  191.  
  192. }
  193. System.out.println("");
  194. System.out.println("fin du programme, a+");
  195. }
  196.  
  197. }
  198. }



Merci d'avance pour votre aide.

Autres pages sur : probleme inportation donnee excel tableau

a c 232 L Programmation
23 Janvier 2012 11:52:27

Salut,

T'es sûr que ton initilisation de tableau est correcte ?
  1. int tabF[][] ={new int [7],new int [7]};
  2. int tabFc[][] ={new int [7],new int [7]};


Ca serait pas plutôt :
  1. int tabF[][] = new int [7][7];
  2. int tabFc[][] = new int [7][7];
23 Janvier 2012 13:33:39

Non, ça viens pas de la, car on peut le déclarer aussi comme ça.
a c 232 L Programmation
23 Janvier 2012 13:58:54

Tu insères les données dans le tableau de 1 à 7, alors qu'un tableau à 7 valeurs c'est de 0 à 6
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS