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

Collection et Stream Java Discussion :

Tableau et plateau en Java


Sujet :

Collection et Stream Java

  1. #1
    Membre régulier
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Janvier 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Janvier 2015
    Messages : 10
    Par défaut Tableau et plateau en Java
    Bonjour All,

    Je me permet de venir vers vous car comme vous vous en doutez j'ai un petit soucis sur java.

    je suis actuellement au Cnam et j'ai une partie d'exercice sur les tableaux que je n'arrive pas à résoudre.

    Ci-dessous vous trouverez l'énoncé de l'exercice:

    a) Ecrire un code pour créer un tableau 'TAB' de taille N et demander à un utilisateur de le remplir avec des lettres minuscules .
    b) On appelle 'plateau' une succession de lettres identiques . La taille d'un plateau est égale au nombre de lettres identiques . Ecrire un code qui calcule et affiche la plus grande taille T de plateau contenus dans le tableau 'TAB' .
    Exemple : si le tableau 'TAB' contient les lettres suivantes : abbaaaccdfaaagge , le programme devra afficher que T vaut 3 .


    Donc la partie a) rien de bien compliqué mon programme ressemble à ça:



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class Exo2 {
     
    	public static void main (String [] arg){
    		int N,i;
    		System.out.println("Donner la taille du tableau");
    		N = Lire.i();
    		char [] tab  = new char [N];
    		for(i=0;i<N;i=i+1){
    			System.out.println("Donner la lettre n "+(i+1));
    			tab[i]=Lire.c();
    			              }
    		                                   }
    		          }
    Et la pour la partie B je bloque complètement:

    j'ai commencé par faire une boucle for incrémenté dans une autre boucle for... mais je n'ai pas l'impression que ce soit la bonne solution..

    En ce moment même je pense q'un boucle While du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while (i<N-1) 
    {
    if (tab[i+1]==tab[i])
    {
    int compt=compt+1
    }
     
    }
    Mais cela ne fonctionne pas.

    et je ne voit pas de solution à mon problème..

    Sachez que je suis en première année et que je n'ai pas le droit d'utiliser de fonctions ect pour l'instant.

    boucles for; while; if uniquement.

    Merci d'avance .

    En l'attente de votre retour

    Baoshengdady.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Citation Envoyé par baoshengdady;8109221
    [CODE
    while (i<N-1)
    {
    if (tab[i+1]==tab[i])
    {
    int compt=compt+1
    }

    }[/CODE]
    Ici, compt est local au bloc du if (tab[i+1]==tab[i]) : il n'existe que dans le bloc, et, donc, ne peut compter les caractères successifs. En plus, on ne peut pas écrire ça : int compt = quelquechose qui dépend de compt, car ce qui est utilisé dans le calcul doit exister et avoir une valeur avant de pouvoir s'en servir, ce qui n'est pas le cas, parce que justement on le créé ici.

    Donc il te faut déclarer compt en dehors de la boucle.

    Fait bien un for pour parcourir tab, déclare compt en dehors de ce for.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre régulier
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Janvier 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Janvier 2015
    Messages : 10
    Par défaut
    Bonjour,

    Merci pour ton retour!!!

    Je me retrouve donc avec ceci:

    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
    public class Exo2 {
     
    	public static void main (String [] arg){
    		int N,i,compt;
    		compt=0;
    		System.out.println("Donner la taille du tableau");
    		N = Lire.i();
    		char [] tab  = new char [N];
    		for(i=0;i<N;i=i+1){
    			System.out.println("Donner la lettre n "+(i+1));
    			tab[i]=Lire.c();
    			              }
    		while(i<N-1){
    			if(tab[i+1]==tab[i]){
    				compt=compt+1;
    				i=i+1;
    			}
    		}
    		System.out.println(compt);
    		                                   }
    		          }
    mais cela ne règle pas le problème :

    Si je met par exemple 5 en taille de tableau: avec comme valeur ;aaazer.

    le retour sur éclipse est :
    Donner la taille du tableau
    5
    Donner la lettre n 1
    a
    Donner la lettre n 2
    a
    Donner la lettre n 3
    a
    Donner la lettre n 4
    z
    Donner la lettre n 5
    e
    0

    que doit-je faire pour éviter cela ?

    Merci :p

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Là, tu incrémentes l'index de parcours du tableau si les 2 caractères successifs sont égaux, donc jamais si ce n'est pas le cas. Il faut bien sûr parcourir tous les caractères : fait un for, donc.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre régulier
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Janvier 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Janvier 2015
    Messages : 10
    Par défaut
    Bonsoir,

    Alors je suis passé par une boucle for..


    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
    public class Exo2 {
     
    	public static void main (String [] arg){
    		int N,i,compt;
    		compt=0;
    		System.out.println("Donner la taille du tableau");
    		N = Lire.i();
    		char [] tab  = new char [N];
    		for(i=0;i<N;i=i+1){
    			System.out.println("Donner la lettre n "+(i+1));
    			tab[i]=Lire.c();
    			              }
    		for(i=0;i<N-1;i=i+1){
    			if (tab[i+1]==tab[i]){
    				compt=compt+1;
    			}
    		}
    		System.out.println(compt);
    		                                   }
    }

    Mais le résultat n'est toujours pas bon.

    en plus si le tableau 'TAB' contient les lettres suivantes : abbaaaccdfaaagge , le programme devra afficher que T vaut 3 .

    et dans mon programme si je rentre les lettres dites voici mon retour :
    Donner la taille du tableau
    16
    Donner la lettre n 1
    a
    Donner la lettre n 2
    b
    Donner la lettre n 3
    b
    Donner la lettre n 4
    a
    Donner la lettre n 5
    a
    Donner la lettre n 6
    a
    Donner la lettre n 7
    c
    Donner la lettre n 8
    c
    Donner la lettre n 9
    d
    Donner la lettre n 10
    f
    Donner la lettre n 11
    a
    Donner la lettre n 12
    a
    Donner la lettre n 13
    a
    Donner la lettre n 14
    g
    Donner la lettre n 15
    g
    Donner la lettre n 16
    e
    7
    Alors que le retour devrait donner 3 .

    Ou est mon erreur ?

    Merci d'avance.

    Bao.

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Hello,

    tu as pensé à faire quelque chose (augmenter la taille repérée) lorsque tu restes sur la même lettre consécutives.
    Ton erreur est que tu ne fais rien quand ce n'est pas le cas. Ne crois-tu pas qu'il y a aussi des choses à faire quand la lettre est différente ?

    En fait, tu devrais faire un exercice intermédiaire pour chercher plus facilement :
    exercice : donner la liste complète des plateaux que tu rencontres, dans l'ordre. Avec leur lettre et leur taille.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre régulier
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Janvier 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Janvier 2015
    Messages : 10
    Par défaut
    Bonsoir,

    Alors je ne trouve pas le moyen de faire ce que tu me demande et je pense que tout mon problème est là ...

    Je commence un peu à désespérer...

    Une autre piste serait la bienvenue .


    Merci d'avance.

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Décomposons le problème :

    • Un plateau est une série de lettres succesives identiques ;
    • On veut connaitre le plus long plateau présent dans un tableau de lettres
    • Pour connaitre la taille d'un plateau, il faut compter toutes les lettres du plateau
    • Pour savoir qu'on change de plateau, il suffit de savoir que 2 lettres successives sont différentes (le test que tu fais)


    Fais-le d'abord sur papier, compte les lettres et compare aux nombres de lettres de chaque plateau à chaque position de lettres pour t'aider. Imagine un compteur de lettres global, plus un sous-compteur pour chaque plateau
    tableau :                   abbaaaccdfaaagge
    nombre de lettres total :   123456789...
    nombre de lettres plateau : 1121231211... 
    • Comment placer compt = compt + 1 dans ta boucle pour qu'il prenne les valeur de la deuxième ligne ci-dessus
    • Que faudrait-il faire dans le if avec compt pour qu'on ne compte que les caractères d'un plateau (pour qu'il prenne les valeurs de la troisième ligne ci-dessus) ?
    • De quoi a-t-on besoin pour pour pouvoir afficher à la fin du programme la taille du plus grand plateau ?
    • Qu'ajouter ensuite dans le if, pour détecter si la taille de plateau à ce moment est la plus grande de toute (et donc pouvoir la mémoriser pour pouvoir l'afficher à la fin du programme) ?



    PS quand tu auras fait ça, pense à une dernière chose : que se passe-t-il à la dernière itération (ou plutôt que ne se passe-t-il pas) ? Modifie le tableau d'essai en ajoutant à la fin gggg par exemple et lance ton programme pour voir (tu devrais obtenir 4)...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Membre régulier
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Janvier 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Janvier 2015
    Messages : 10
    Par défaut
    Bonjour,

    Alors je me retrouve avec ce Code:

    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
    public class Ex2 {
     
    	public static void main (String [] arg){
    		int N,i,compt,t;
    		compt=0;
    		t=0;
    		System.out.println("Donner la taille du tableau");
    		N = Lire.i();
    		char [] tab  = new char [N];
    		for(i=0;i<N;i=i+1){
    			System.out.println("Donner la lettre n "+(i+1));
    			tab[i]=Lire.c();
    			              }
    		for(i=0;i<N-1;i=i+1){
    			compt=compt+1;
    				if(tab[i+1]==tab[i]){
    					t=t+1;
    					System.out.println(t);
    				} 
    						}
    		System.out.println(compt);
    		System.out.println(t);
    		                                   }
    		          }
    Les Print sont de trop je sais c'est juste pour voir ce qui ce passe à chaque étape!
    Mais je n'ai aucune solution pour le reste du problème...

    Je doit le rendre avant dimanche minuit ...

    Donc mon code compte le nombre de caractères et le nombre de fois ou un caractère se répète mais après ça je ne sais pas ...

    j'ai pourtant suivi les cours comme il faut et fait tous les exercices sans trop de difficultés..

    La je ne voit vraiment pas quoi faire et comment intégrer tes directives...

    Les questions que tu me pose sont les questions que je me posent et c'est exactement l'application de ces questions qui le posent problème..


    Que faudrait-il faire dans le if avec compt pour qu'on ne compte que les caractères d'un plateau.

    De quoi a-t-on besoin pour pour pouvoir afficher à la fin du programme la taille du plus grand plateau ?

    J'imagine qu'il faut une autre variable qui stock et compare la valeur stocké avec la nouvelle valeur du nouveau plateau ..
    Mais encore une fois je ne vois pas comment faire.

    Enfin voila .

    Merci d'avance pour votre aide.

    PS:Je pense sincèrement qu'il me faut un exemple pour comprendre ce qui m'échappe.

    Je ne vous demande pas de faire mon travail pour moi (un peut quand même :p)

    je ne sais pas comment tu peut me donner un exemple sans me mâcher le travail et j'en suis désolé je préféré trouver tout seul et j’adhère à la politique du tutorat.

    Mais la Need du concret !

    Amicalement,

    Bao.

  10. #10
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,
    Citation Envoyé par baoshengdady Voir le message
    De quoi a-t-on besoin pour pour pouvoir afficher à la fin du programme la taille du plus grand plateau ?

    J'imagine qu'il faut une autre variable qui stock et compare la valeur stocké avec la nouvelle valeur du nouveau plateau ..
    Mais encore une fois je ne vois pas comment faire.
    Bah, c'est exactement ça. Et pour cette variable, tu fais exactement comme pour compt : tu lui donne un nom, un type (int forcément) et tu la déclares là où elle va te permettre de l'afficher à la fin du programme, donc forcément à côté du compt. Si elle était dans la boucle, ou dans le if, ce ne serait de toute façon pas possible, car il faut pouvoir ne l'initialiser qu'une seule fois, sinon on va repartir d'une nouvelle valeur à chaque itération, ou if (le problème que tu avais au début avec compt).

    Ensuite, si tu observes bien les différences de comptes dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    tableau :                   abbaaaccdfaaagge
    nombre de lettres total :   123456789...
    nombre de lettres plateau : 1121231211...
    Et que (plutôt que d'afficher t), tu affiches compt, après l'avoir incrémentée, dans ton dernier code : tu verras que ça correspond à la ligne "nombre de lettres total".
    Tu peux voir que dans la ligne "nombre de lettres plateau", on recommence à 1 à chaque début de plateau (donc au moment où on détecte la différence entre 2 lettres successifs (donc dans le if).
    Tu peux voir aussi que si on voulait que compt corresponde aux valeurs de la ligne "nombre de lettres de plateau", il faudrait faire quelque chose sur compt donc, dans le if. Là tu devrais voir quoi ?
    Essaye et affiche la valeur de compt dans le if ensuite.

    Ensuite stocke ce compt dans le if dans la variable à afficher comme résultat à la fin. Que manque-t-il pour n'y stocker que la plus grande valeur ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  11. #11
    Membre régulier
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Janvier 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Janvier 2015
    Messages : 10
    Par défaut
    Salut,

    Merci pour toutes les réponses rapides !!

    Alors j'ai suivi tes instructions et je me retrouve donc avec ce Code:


    public class Ex2 {

    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
    public static void main (String [] arg){
    		int N,i,compt,t;
    		compt=0;
    		t=0;
    		System.out.println("Donner la taille du tableau");
    		N = Lire.i();
    		char [] tab  = new char [N];
    		for(i=0;i<N;i=i+1){
    			System.out.println("Donner la lettre n "+(i+1));
    			tab[i]=Lire.c();
    			              }
    		for(i=0;i<N-1;i=i+1){
    				if(tab[i+1]==tab[i]){
    					compt=compt+1;
    				} else
    				{ if (t<compt)
    					t=compt;
    					compt=0;
    				}
    						}
    		System.out.println(t);
    		                                   }
    		          }
    mais la ou " t " doit me donner 3 il me renvoi 2 faut t'il que j'affiche t+1 à la fin du programme ?

    Ou y'a t'il quelque chose qui cloche dans le code en question ?

    Merci d'avance!

    Amicalement,

    Bao.

  12. #12
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if(tab[i+1]==tab[i]){
    					compt=compt+1;
    				} else
    				{ if (t<compt)
    					t=compt;
    					compt=0;
    				}
    Dans le else, tu n'incrémentes pas compt, alors qu'il faut quand même compter le caractère, même si on est en changement de plateau (il faut compter tous les caractères)

    Fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    compt=compt+1;
    if(tab[i+1]!=tab[i]){
      ...
    }
    Ensuite, tu réinialises le compteur que si t<compt, alors qu'il faut le réinitialiser quand on change de plateau...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  13. #13
    Membre régulier
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Janvier 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Janvier 2015
    Messages : 10
    Par défaut
    Salut ,

    Alors maintenant j'ai ceci :

    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
    public class Ex2 {
     
    	public static void main (String [] arg){
    		int N,i,compt,t;
    		compt=0;
    		t=0;
    		System.out.println("Donner la taille du tableau");
    		N = Lire.i();
    		char [] tab  = new char [N];
    		for(i=0;i<N;i=i+1){
    			System.out.println("Donner la lettre n "+(i+1));
    			tab[i]=Lire.c();
    			              }
    		for(i=0;i<N-1;i=i+1){
    				if(tab[i+1]==tab[i]){
    					compt=compt+1;
    				} if (tab[i+1]!=tab[i]){
    					t=compt;
                                            compt=compt+1;
    					compt=0;
    					if (t<compt){
    						t=compt;
    					}
    				}
    						}
    		System.out.println(t);
    		                                   }
    		          }
    Et ce n'est toujours pas bon..

    Alors on change de plateau quand (tab[i+1]!=tab[i])

    et je ne comprend pas le fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    compt=compt+1;
    if(tab[i+1]!=tab[i]){
      ...
    }

    Merci d'avance.

    Amicalement.

    Bao.

  14. #14
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    compt=compt+1;
    compt=0;
    Il n'y a rien qui t'interpelle là ?

    Mets compt=0 après le test suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (t<compt){
        t=compt;
    }
    Après pense au PS que je t'ai mis dans le post 8.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  15. #15
    Membre régulier
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Janvier 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Janvier 2015
    Messages : 10
    Par défaut
    Bon alors :


    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
    public class Ex2 {
     
    	public static void main (String [] arg){
    		int N,i,compt,t;
    		compt=0;
    		t=0;
    		System.out.println("Donner la taille du tableau");
    		N = Lire.i();
    		char [] tab  = new char [N];
    		for(i=0;i<N;i=i+1){
    			System.out.println("Donner la lettre n "+(i+1));
    			tab[i]=Lire.c();
    			              }
    		for(i=0;i<N-1;i=i+1){
    			compt=compt+1;
    				if(tab[i+1]==tab[i]){
    					compt=compt+1;
    				} if (tab[i+1]!=tab[i]){
    					t=compt;
    					compt=compt+1;
    					if (t<compt){
    						t=compt;
    					}
    					compt=0;
    				}
    						}
    		System.out.println(t);
    		                                   }
    		          }
    j'arrive à ceci.

    Il manque toujours un petit quelque chose :p

    Je suis désolé avec tout ce que tu me donne j'y arrive toujours pas.

    Je me sens nul ;

    Merci.

  16. #16
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Pourquoi avoir ajouté t=compt; au début du code du if (tab[i+1]!=tab[i]){ ? Là, systématiquement ton t, il vaut la longueur du plateau, quand on détecte le changement de plateau. A tous les appels, donc également au dernier. Donc il vaudra la longueur du dernier (enfin pas tout à fait en fait, c'est le PS dont je t'ai parlé). Le t doit être affecté à la longueur du plus long plateau, donc dans le if ( t<compt ) qui est bien là pour dire "est-ce que la taille du plateau actuel est plus grand que celle du plus grand qu'on a déjà trouve", et que si c'est le cas, c'est le nouveau plateau qui est le plus long.

    D'ailleurs, utilise des noms de variables qui ont un sens : au lieu de t, plateauLePlusLong par exemple. Bon, d'accord, c'est peut-être un peu long comme nom, plusLong alors, ou max par exemple. Cela pourrait t'aider quand tu écris quelquechose commeplusLong = actuel à t'interpeller sur si la ligne est bien placée ou pas.

    Bon, tu y es presque là quand même. Donc tu as pu y arriver (presque) tout seul. C'est normal au début de ne pas avoir tous les réflexes, que tu acquerras au fur et à mesure, et de plus en plus vite, plus tu pratiqueras.

    Je vais pas faire durer plus longtemps le suspense au sujet du PS : maintenant que ton programme fonctionne (il y a juste la ligne ci-dessus à enlever), en essayant le jeu de test que je t'ai donné, tu verras qu'on obtient 3 et pas 4. Pourquoi ? Parce que, comme je l'ai déjà dit, il faut compter tous les caractères, or, là, comme ton for va jusqu'à N-1, le dernier n'est pas traité. Il faut donc le traiter. Il y a plusieurs façons de faire, la plus naturelle (et la plus classique), et de traiter ce cas, après la boucle. Tu incrémentes compt, pour compter le dernier caractère, et tu fais exactement le même test que dans la boucle, pour savoir si le compt obtenu (qui correspond donc à la taille du dernier plateau) est plus grande que t, et tu modifies t si c'est le cas.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  17. #17
    Membre régulier
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Janvier 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Janvier 2015
    Messages : 10
    Par défaut
    Salut alors je cite :

    traiter ce cas, après la boucle. Tu incrémentes compt, pour compter le dernier caractère, et tu fais exactement le même test que dans la boucle, pour savoir si le compt obtenu (qui correspond donc à la taille du dernier plateau) est plus grande que t, et tu modifies t si c'est le cas.

    Alors quand tu me dit après la boucle on parle bien de la boucle for ?

    et dans ce cas incrémenter compt ?

    Je ne voit pas comment incrémenter compt sans repassé par une boucle for..

    je sors de la boucle et je fait un while (i<N) faire i++ ?

    et je refais le test ?
    AHHHH

    Merci d'avance !

    Ps effectivement si je finit par un gggg j'ai 3 non pas 4 :p ...

  18. #18
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Tu devrais avoir ça au final, n'est-ce-pas ?

    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
     
    int compt=0;
    int t=0;
     
    ...
     
    for (i = 0; i < N - 1; i = i + 1) { // je parcours tous les caractères sauf le dernir
       compt = compt + 1; // je compte le caractère lu
       if (tab[i + 1] != tab[i]) { // si le caractère suivant est différent, alors je vais changer de plateau
          if (t < compt) { // si le nombre de caractères du plateau actuel est supérieur au plus grand trouvé jusque là
    	 t = compt; // alors c'est celui-là le plus grand
          }
          compt = 0; // je réinitialise pour compter les caractères du prochain plateau
       }
    }
    compt existe en dehors de la boucle, puisqu'il est déclaré avant. On peut donc le lire ou le modifier. Idem pour t.

    Donc on peut écrire :
    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
     
    int compt=0;
    int t=0;
     
    ...
     
    for (i = 0; i < N - 1; i = i + 1) { // je parcours tous les caractères sauf le dernier
       compt = compt + 1; // je compte le caractère lu
       if (tab[i + 1] != tab[i]) { // si le caractère suivant est différent, alors je vais changer de plateau
          if (t < compt) { // si le nombre de caractères du plateau actuel est supérieur au plus grand trouvé jusque là
    	 t = compt; // alors c'est celui-là le plus grand
          }
          compt = 0; // je réinitialise pour compter les caractères du prochain plateau
       }
    }
    compt = compt + 1; // je compte le dernier caractère, que je n'ai encore parcouru
    if (t < compt) { // si le nombre de caractères du plateau actuel (le dernier donc) est supérieur au plus grand trouvé jusque là
       t = compt; // alors c'est celui-là le plus grand
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  19. #19
    Membre régulier
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Janvier 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Janvier 2015
    Messages : 10
    Par défaut
    Ahhh oki!!

    En tous cas merci pour ton aide.!

    et toutes les explications chaque ligne Vraiment Super!

    je trouvais que je ne comprenais pas très bien ce qui ce passait dans le programme :p

    Ça c'est fait.


    Encore une fois mille merci et vous me reverrez surement bientôt!!

    Amicalement,

    Bao.

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

Discussions similaires

  1. comment fonctionner un tableau de socket en java
    Par samsoum2 dans le forum Entrée/Sortie
    Réponses: 0
    Dernier message: 19/05/2014, 13h13
  2. Comparaison tableau Excel et classe java avec Objets
    Par cisco.nat dans le forum Collection et Stream
    Réponses: 17
    Dernier message: 19/06/2013, 15h45
  3. Réponses: 1
    Dernier message: 25/08/2010, 10h50
  4. Comment créer et parcourir un tableau à deux dimensions en java SE
    Par Invité dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 25/02/2009, 11h07
  5. tableau d'objets en java
    Par lion000 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 26/04/2007, 08h21

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