IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

probleme de ArrayOutOfBoundsException


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2009
    Messages
    269
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 269
    Par défaut probleme de ArrayOutOfBoundsException
    Bonjour,

    Toujours mes problèmes de climat.
    J'ai écrit un programme que je n'ai pas su raccourcir pour vous le présenter.
    Il a un probleme de ArrauOutOfBoundsException ligne 81 et 96 à l'execution
    pourtant tout à l'air d'aller bien
    Je vous présente le code
    à l'execution il demande un fichier, moi je lui donne un fichier .prn d'une centaine de ligne de 20 chiffres, ici il ne travaille que sur les 31 premières lignes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
     
    import java.util.*;
    import java.io.*;	 
     
     
    class Plage
    	{
    	File fic;
    	int nbtemp1;
    	int nbtemp2;//definiront les périodes de relevés 
    	int [][]tab1=new int[nbtemp2][60];//resultats par températures
    	int [][]tabl=new int[nbtemp2][20];//ma présentation (20 villes)
    	Plage(int nbftemp1,int nbftemp2)//définit la période d'observation
    		{
    		nbtemp1=nbftemp1;
    		nbtemp2=nbftemp2;//constructeur je donnne 0ànbftemps
    			}
    		int gettab1(int i,int j)
    			{
    			return(tab1[i][j]);
    			}
    		int gettabl(int i,int j)
    			{
    			return(tabl[i][j]);
    			}
    		int getnbtemp2()
    			{
    			return nbtemp2;
    			}
    	void add1()//calcul la fréquence cumulées des températures
    			{
    			tabl=new int[nbtemp2][20];
    			int nblu=1-1;
    			try
    			{
    			System.out.println("quel fichier ?");
    			Scanner s = new Scanner(System.in);
    			String fichier = s.nextLine();
    			fic =new File(fichier);
    			BufferedReader entree = new BufferedReader(new FileReader(fic));
    			String ligne;
    			try
    			{
    			while(nblu<nbtemp2)
    				{
    				ligne = entree.readLine();
    				if(ligne==null) break;
    				StringTokenizer tk = new StringTokenizer(ligne);
    				int nt = tk.countTokens();
    				int i=0;
    				while(tk.hasMoreTokens() )
    					{
    					tabl[nblu][i]=Integer.parseInt(tk.nextToken());
    					i++;
    					}
    				nblu++;
    				}
     
    				entree.close();	
     
    			}
    			catch(java.io.IOException e2){System.out.println(" essaye d'acceder au E/S"); }
    			}
    			catch(FileNotFoundException e1){System.out.println(" essaye d'acceder au fichier"); }
     
    			}
     
    		void frequence1()
    			{
    			add1();
     
    					for(int i=0;i<nbtemp2;i++)
    						{
    						for(int j=0;j<20;j++)
    							{
    							for(int j1=0;j1<70;j1++)
    								{
    								if(j1+1==tabl[i][j])
    									tab1[i][j1+1]++;
     
    								}
    							}
    						}
     
    			}}
     
     
    public class Frequenceessaiclim 
    	{
    	public static void main(String args[])
    		{
     
    		Plage premier = new Plage(0,31);//je choisit les 31 //derniers jours d'observation (c'est un essai)
    		premier.frequence1();
    		int ta=premier.getnbtemp2();//c'était tentatives de debug 
    			System.out.print(ta);//idem
    			for(int i=0;i<ta;i++)//je garde la variable stupide issue du debug, çà change rien
    			{
    				for(int j=0; j<60;j++)
    				{
    				int b=premier.gettab1(i,j);
    				System.out.print(b+"*");
    				}
    			System.out.println();
    			}
    		}
     	}
    j'ai fait des test, changer le nom des variables, du fichiers il semble que c'est dans frequence1 que le i ne veut pas avancer (au dela de 3) !


    Pouvez vous m'aider

    merci beaucoup

    Philippe

  2. #2
    Membre éclairé
    Inscrit en
    Septembre 2009
    Messages
    269
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 269
    Par défaut
    je ne sais pas si cela pourra vous aider mais
    au debut les commentaires sont inversés :
    int [][]tabi; c'est ma présentation , celle que je vais imprimer ensuite
    int [][]tabl; je récupère bétement les données du fichier

    merci

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int [][]tab1=new int[nbtemp2][60]
    ....
        for(int j1=0;j1<70;j1++)
            ....
            tab1[i][j1+1]
    vu que la tableau a une taille de est 60, c'est un peu difficile d'aller choper, par exemple, l'élément 71

    PS: a l'avenir, indiquez dans le code les lignes qui correspondent à l'erreur et donnez le stacktrace complet de l'erreur.

  4. #4
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2006
    Messages : 35
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class Plage
    	{
    	File fic;
    	int nbtemp1;
    	int nbtemp2;//definiront les périodes de relevés 
    	int [][]tab1=new int[nbtemp2][60];//resultats par températures
    	int [][]tabl=new int[nbtemp2][20];//ma présentation (20 villes)
    	Plage(int nbftemp1,int nbftemp2)//définit la période d'observation
    		{
    		nbtemp1=nbftemp1;
    		nbtemp2=nbftemp2;//constructeur je donnne 0ànbftemps
    			}
    ==>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int [][]tab1=new int[nbtemp2][60];
    identique à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int [][]tab1=new int[0][60];

  5. #5
    Membre éclairé
    Inscrit en
    Septembre 2009
    Messages
    269
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 269
    Par défaut
    merci de cette remarque, j'ai remis 60 et le résultat est le même, 70 avait été remplacé aprés pour voir si j'avais la même erreur, si c'était un débordement analogue et j'ai oublié de remettre 60 avant de vous l'envoyer, désolé.

    Philippe

  6. #6
    Membre éclairé
    Inscrit en
    Septembre 2009
    Messages
    269
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 269
    Par défaut
    (j1+1), aussi je l'ai retiré, au début la taille des tableaux était correcte pour ça, ja voulais ajouter un code en fin de ligne,

    Philippe

  7. #7
    Membre éclairé
    Inscrit en
    Septembre 2009
    Messages
    269
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 269
    Par défaut
    Voici le code du programme débarassé de toute trace de verif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
     
    import java.util.*;
    import java.io.*;	 
     
     
    class Plage
    		{
    		File fic;
    		int nbtemp1;
    		int nbtemp2;//definiront les périodes de relevés de températures
    		int [][]tab1=new int[nbtemp2][60];
    		int [][]tabl=new int[nbtemp2][20];
    		Plage(int nbftemp1,int nbftemp2)//définit la période d'observation
    			{
    			nbtemp1=nbftemp1;
    			nbtemp2=nbftemp2;//constructeur mais je vais simplifier nbftemps vaut 0
    			}
    		int gettab1(int i,int j)
    			{
    			return(tab1[i][j]);
    			}
    		int gettabl(int i,int j)
    			{
    			return(tabl[i][j]);
    			}
    		int getnbtemp2()
    			{
    			return nbtemp2;
    			}
    		void add1()//calcul la fréquence cumulées des températures
    			{
    			tabl=new int[nbtemp2][20];
    			int nblu=1-1;
    			try
    			{
    			System.out.println("quel fichier ?");
    			Scanner s = new Scanner(System.in);
    			String fichier = s.nextLine();
    			fic =new File(fichier);
    			BufferedReader entree = new BufferedReader(new FileReader(fic));
    			String ligne;
    			try
    			{
    			while(nblu<nbtemp2)
    				{
    				ligne = entree.readLine();
    				if(ligne==null) break;
    				StringTokenizer tk = new StringTokenizer(ligne);
    				int nt = tk.countTokens();
    				int i=0;
    				while(tk.hasMoreTokens() )
    					{
    					tabl[nblu][i]=Integer.parseInt(tk.nextToken());
    					i++;
    					}
    				nblu++;
    				}
     
    				entree.close();	
     
    			}
    			catch(java.io.IOException e2){System.out.println(" essaye d'acceder au E/S"); }
    			}
    			catch(FileNotFoundException e1){System.out.println(" essaye d'acceder au fichier"); }
     
    			}
     
    		void frequence1()
    			{
    			add1();
     
    					for(int i=0;i<nbtemp2;i++)
    						{
    						for(int j=0;j<20;j++)
    							{
    							for(int j1=0;j1<60;j1++)
    								{
    								if(j1+1==tabl[i][j])
    									tab1[i][j1]++;
     
    								}
    							}
    						}
     
    			}}
     
     
    public class Frequenceessaiclim 
    	{
    	public static void main(String args[])
    		{
     
    		Plage premier = new Plage(0,31);//je choisit les 31 derniers jours d'observation (c'est un essai)
    		premier.frequence1();
    			int ta=premier.getnbtemp2();//c'était des tentatives de debug (inutile autrement)
    			System.out.print(ta);//idem
    			for(int i=0;i<ta;i++)//je garde la variable stupide issue du debug, àa change rien
    			{
    				for(int j=0; j<60;j++)
    				{
    				int b=premier.gettab1(i,j);
    				System.out.print(b+"*");
    				}
    			System.out.println();
    			}
    		}
     	}

Discussions similaires

  1. Probleme de rafraichissement d'un BDGrid
    Par marmotte dans le forum Bases de données
    Réponses: 10
    Dernier message: 28/05/2004, 18h07
  2. Réponses: 2
    Dernier message: 30/05/2002, 08h54
  3. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01
  4. [Kylix] Probleme d'execution de programmes...
    Par yopziggy dans le forum EDI
    Réponses: 19
    Dernier message: 03/05/2002, 14h50
  5. [Kylix] Probleme de nombre flottant!!
    Par yopziggy dans le forum EDI
    Réponses: 5
    Dernier message: 02/05/2002, 10h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo