Erreur java.lang.ArrayIndexOutOfBoundsException [Résolu]

mayma - 19 juil. 2016 à 11:04 - Dernière réponse : BunoCS 14176 Messages postés lundi 11 juillet 2005Date d'inscriptionModérateurStatut 19 octobre 2018 Dernière intervention
- 19 juil. 2016 à 12:59
Bonjour,
Voilà mon erreur :java.lang.ArrayIndexOutOfBoundsException: 4, j'arrive pas à le résoudre. Merci bien pour votre aide. Voici mon code:

public class CoordinateMatrix {

 private static GeometryFactory geomFact = new GeometryFactory();

 private Map<Integer, Node> multiMap = new HashMap<>();


 public CoordinateMatrix(File f) throws IOException {
  fillMatrix(f);
 }

 public void fillMatrix(File f) throws IOException {

  // We create a BufferReader
  InputStream ips = new FileInputStream(f);
  InputStreamReader ipsr = new InputStreamReader(ips);
  BufferedReader br = new BufferedReader(ipsr);

  String Line = br.readLine();

  // On récupère le tableau des identifiants

  int id = 0;
  int indexX = 2;
  int indexY = 3;
  int cat= 4;// catégorie :point de collecte ou dépot de stockage.
  // On parcourt chaque ligne
  while ((Line = br.readLine()) != null) {

   // On parse la ligne courante
   String[] tabLineTemp = Line.split(";");

   System.out.println(Arrays.toString(tabLineTemp));
   
  
   //On fait un test => si c'est 0 alors on crée un Point de Collecte
   //Si c'est un on crée un centre de stockage
   //On ajoute à la hasmap
   
if(Integer.parseInt(tabLineTemp[cat])==0){
 
 DepotDeStockage d= new DepotDeStockage (Integer.parseInt(tabLineTemp[id]), indexX, indexY, 0);
 
 
}


  else if(Integer.parseInt(tabLineTemp[cat])==1){
  PointDeCollecte p= new  PointDeCollecte  (Integer.parseInt(tabLineTemp[id]), indexX, indexY, 1);
 
   
  }


  
   
 Node n = new Node(Integer.parseInt(tabLineTemp[id]),
     

    Double.parseDouble(tabLineTemp[indexX])

   
   , Double.parseDouble(tabLineTemp[indexY])
   ,  Double.parseDouble(tabLineTemp[cat]))                              ;

  multiMap.put(Integer.parseInt(tabLineTemp[id]), n);

  
  }
   


  br.close();
 }

 public Set<Integer> getListId() {
  return multiMap.keySet();
 }



 public com.vividsolutions.jts.geom.Point getPoint(int id) {

   
  Node n = multiMap.get(id);
  
  if(n == null){
   return null;
  }
  

  return geomFact.createPoint(new Coordinate(n.getX(), n.getY()));

 }
 
 public Collection<Node> getListNodes(){
  return multiMap.values();
 }

 public static void main(String[] args) throws IOException {

  File f = new File(CoordinateMatrix.class.getResource("/data/idf/com_idf_pt_xy.csv").getPath());
  CoordinateMatrix cM = new CoordinateMatrix(f);

  
    Set<Integer> Lid = cM.getListId();
    System.out.println("---------------------------------"); for (int i =
    0; i < Lid.size(); i++) {
    
    System.out.print(Lid.toArray()[i] + ";");
    
    } System.out.println("");
    System.out.println("---------------------------------");
    
    com.vividsolutions.jts.geom.Point p = cM.getPoint(77283);
    
    System.out.println("Les coordnnées du point qui a l'id 77283 sont : " + p);
   

 }

}


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ICI

Merci d'y penser dans tes prochains messages.
Afficher la suite 

Votre réponse

5 réponses

BunoCS 14176 Messages postés lundi 11 juillet 2005Date d'inscriptionModérateurStatut 19 octobre 2018 Dernière intervention - 19 juil. 2016 à 11:30
0
Merci
Hello,

ArrayOutOfBoundsException te dit que tu essaies d'accéder à une case de ton tableau qui n'existe pas...

Au niveau de tes ID, tu les déclares comme suit:
int id = 0;
int indexX = 2;
int indexY = 3;
int cat= 4;// catégorie :point de collecte ou dépot de stockage.

Et tu les utilises comme index de tableau. Or:
- il n'y a pas de valeur "1"
- un index de tableau va de "0" à "taille-1"

Note: j'ai édité ton message. Voir encadré.
Commenter la réponse de BunoCS
0
Merci
Bonjour,
Merci pour votre réponse, en fait j'ai un tableau de taille 5 et pour le moment j'ai pas besoin de la 2éme case c'est pour cela j'ai pas déclaré l'id.
Commenter la réponse de mayma
BunoCS 14176 Messages postés lundi 11 juillet 2005Date d'inscriptionModérateurStatut 19 octobre 2018 Dernière intervention - 19 juil. 2016 à 11:41
0
Merci
As-tu testé ton code en debug? Voir où tu as cette exception?
Commenter la réponse de BunoCS
0
Merci
C'est bon j'ai pu résoudre le problème. C'est gentil de votre part.
Bonne journée
BunoCS 14176 Messages postés lundi 11 juillet 2005Date d'inscriptionModérateurStatut 19 octobre 2018 Dernière intervention - 19 juil. 2016 à 12:59
Pour garder l'esprit communautaire, ce serait pas mal d'indiquer ta solution et de passer ce topic en "résolu"
Commenter la réponse de mayma

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.