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 :

Problème avec un programme


Sujet :

avec Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 80
    Points : 41
    Points
    41
    Par défaut Problème avec un programme
    bonjour tous le monde;
    j'ai un problème avec un petit programme en java, le but est de trouvé le max d'un tableau de tableau, donc mon idée est de trouvé les max de chaque tableau constituant mon tableau et les stocké dans un autre tableau que j'ai appeler max et partir de ce tableau je fait encore un traitement pour trouvé le maximum générale mais le problème c'est que ça marche pas.
    voici le programme que j'ai écrit:
    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
    class Fonction{
        static void  maxi(int[][] t){
    	int[] max=new int[t.length];
    	for (int i=0;i<t.length;i++){
    	    if (t[i]==null){
    		System.out.println("le tableau "+i+" est vide");
    		else	if (t[i]!=null){
    		    if (t[i][0]<t[i][1])
    			max[i]=t[i][1];
    		    else max[i]=t[i][0];
    		    for (int j=2;j<t[i].length;j++){
    			if (max[i]<t[i][j])
    			    max[i]=t[i][j];
    		    }
    		}
    	    }
     
    	}
     
        }
        int maximum;
        if (max[0]<max[1])
    	maximum=max[1];
        else maximum=max[0];
        for (int k=2;k<t.length;k++){
    	if(maximum<max[k])
    	    maximum=max[k];
        }
        System.out.println("le maximum du tableau de tableau est"+maximum);
    }
    }
     
     
    class Ex4bis{
        public static void main(String[] args){
    	int[][] t={{1,2,3,4},{},{11,12,13,14,15}};
    	Fonction.maxi(t);
        }
    }

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    C'est voulu, de ne pas simplement parcourir tous les éléments du tableau de tableaux, et calculer le max comme d'habitude quand on parcourt des éléments ?

    Et accessoirement, comment tu sais que ça ne marche pas ? Il se passe quoi, qu'est-ce qui ne te plaît pas ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 80
    Points : 41
    Points
    41
    Par défaut
    merci mon ami mais mon adjectif c'est de savoir quel est le problème dans mon code et pas la méthode de trouvé le max

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    C'est raisonnable.

    Et donc, comme j'ai ajouté peu de temps après :
    "Et accessoirement, comment tu sais que ça ne marche pas ? Il se passe quoi, qu'est-ce qui ne te plaît pas ? "
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre éclairé Avatar de JoeChip
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 536
    Points : 803
    Points
    803
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (t[i]==null){
    		[...]
    		else	if (t[i]!=null){
    Euh.... Les accolades sont au mauvais endroit, et en plus ça ne sert à rien de tester d'abord si t[i] est égal à null, et ensuite s'il ne l'est pas...
    Sans danger si utilisé conformément au mode d'emploi.

    (anciennement BenWillard, enfin moins anciennement que ... enfin bon c'est une longue histoire... Un genre de voyage dans le temps...)

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 80
    Points : 41
    Points
    41
    Par défaut
    j'ai fait le test t[i]==null parce que si je le fait pas j'aurais une erreur car le programme va cherché t[i][0] quand i est égale a 1 et il ne va rien trouvé car notre tableau dans ce cas est vide (il ya pas de référence se qui se traduit par null)

  7. #7
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Citation Envoyé par bensof1 Voir le message
    j'ai fait le test t[i]==null parce que si je le fait pas j'aurais une erreur car le programme va cherché t[i][0] quand i est égale a 1 et il ne va rien trouvé car notre tableau dans ce cas est vide (il ya pas de référence se qui se traduit par null)
    Il veut juste te signifier qu'un if .. else est suffisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (test[i] == null) {
      ...
    } else {
      ...
    }
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 80
    Points : 41
    Points
    41
    Par défaut
    voici le code en réglant le problème des accolades:
    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
    class Fonction{
        static void  maxi(int[][] t){
    	int[] max=new int[t.length];
    	for (int i=0;i<t.length;i++){
    	    if (t[i]==null)
    		System.out.println("le tableau "+i+" est vide");
    	   	else {
    		    if (t[i][0]<t[i][1])
    			max[i]=t[i][1];
    		    else max[i]=t[i][0];
    		    for (int j=2;j<t[i].length;j++){
    			if (max[i]<t[i][j])
    			    max[i]=t[i][j];
    		    }
    		}
     
     
    	}
     
     
        int maximum;
        if (max[0]<max[1])
    	maximum=max[1];
        else maximum=max[0];
        for (int k=2;k<max.length;k++){
    	if(maximum<max[k])
    	    maximum=max[k];
        }
        System.out.println("le maximum du tableau de tableau est"+maximum);
    }
    }
    dans la compilation il ya pas de problème mais en exécutant le programme voici l'erreur qui s'affiche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
    	at Fonction.maxi(Ex4bis.java:9)
    	at Ex4bis.main(Ex4bis.java:38)

  9. #9
    Membre éclairé

    Profil pro
    Technicien
    Inscrit en
    Février 2009
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Février 2009
    Messages : 338
    Points : 791
    Points
    791
    Par défaut
    Bonjour,

    L'erreur indique un accès à l'entrée 0 du tableau qui n'existe pas.
    Es-tu sûr que t[i] contient toujours au moins t[i][0] et t[i][1] ?

    Je pense que le problème vient de là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		    if (t[i][0]<t[i][1])
    			max[i]=t[i][1];
    Il faudrait peut être vérifier que t[i][0] et t[i][1] existent avant de faire des tests dessus.

    Benoit

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 80
    Points : 41
    Points
    41
    Par défaut
    normalement ca existe vue que j'ai déclaré mon tableau comme ceci:
    int[][] t={{1,2,3,4},{},{11,12,13,14,15}};

  11. #11
    Membre éclairé

    Profil pro
    Technicien
    Inscrit en
    Février 2009
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Février 2009
    Messages : 338
    Points : 791
    Points
    791
    Par défaut
    Ok. J'ai un peu du mal à lire ces déclarations. Mais si je ne me trompe pas t[1][0] et t[1][1] n'existent pas. Il s'agit de la paire d'accolade vide...

    Benoit

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 80
    Points : 41
    Points
    41
    Par défaut
    oui il n'existe pas c'est pour cela que j'ai ajouter cette instruction
    if (t[i]==null)
    System.out.println("le tableau "+i+" est vide");
    pour que j'ai pas de message d'erreur

  13. #13
    Membre éclairé

    Profil pro
    Technicien
    Inscrit en
    Février 2009
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Février 2009
    Messages : 338
    Points : 791
    Points
    791
    Par défaut
    Ok. Pour être plus précis : t[1][0] et t[1][1] n'existent pas. D'où l'exception.

    Par contre, t[1] existe et n'est pas null (un System.out.println(), ou un debug, te le confirmera). Donc le test que tu fais ne sert pas. Il faut le revoir.

    Benoit.

  14. #14
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par bensof1 Voir le message
    oui il n'existe pas c'est pour cela que j'ai ajouter cette instruction
    if (t[i]==null)
    System.out.println("le tableau "+i+" est vide");
    pour que j'ai pas de message d'erreur
    Quel rapport entre un index qui existe et une comparaison de pointeur null ?

    Réponse : aucun. Pour vérifier si l'index existe pour un tableau, vérifie s'il est égal ou supérieur à zéro, et inférieur à la taille du tableau.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 80
    Points : 41
    Points
    41
    Par défaut
    merci a tous mon problème comme la mentionné thelvin été dans cette instruction t[i]==null je l'est remplacé tous simplement par un test de longueur de tableau.
    par contre est que vous savez pas comment on peut trouvé le max d'un tableau de tableau plus facilement (un programme plus simple).

  16. #16
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Comme dit depuis le début : l'algorithme habituel pour calculer un maximum, en parcourant tous les éléments du tableau de tableaux.

    - définir max à la valeur du premier élément.
    - pour chaque élément :
    -- s'il est supérieur à max
    --- définir max à cet élément-là.

    Et quand t'as fini, max contient le maximum.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 80
    Points : 41
    Points
    41
    Par défaut
    merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 28/12/2006, 15h06
  2. Réponses: 4
    Dernier message: 22/08/2006, 18h28
  3. Réponses: 11
    Dernier message: 14/02/2006, 00h26
  4. Problème avec le programme executable
    Par GreyDragon dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 01/10/2005, 13h43
  5. Problème avec un programme éxécuter en console
    Par bzhrobby dans le forum Windows
    Réponses: 2
    Dernier message: 25/04/2005, 10h42

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