Je n'arrive pas a compter le nombre dans un tableau

ulysse00 Messages postés 291 Date d'inscription lundi 6 novembre 2006 Statut Membre Dernière intervention 12 mai 2013 - 22 févr. 2007 à 12:42
 Utilisateur anonyme - 26 févr. 2007 à 15:18
salut mes amis
j'ai deux tableau le premiere contient A= {a,b,a,c,a,}
le deuxieme A contient {a,b}
je cherche a compter le nombre de a et b dans le tableau A
essayez me comprendre car je coince

si on pose d le compteur qui compte le nombre dans l'exemple d =1 car si il trouve a alors il dois trouver b apres mais a et b sont enchainés

j'ai essayez de mettre ça

int d =  O;
while (i!=A;lenght){
while(j<= B.lenght){
if( A[i]==B[j]){
i++;
j++;
}
j=1;
d++;
}
}
mais ça n'a pas marché

je cherche a compter a et b ensemble
si il trouve a puis b dans le tableau alors incrémente

merci mes amis de bien vouloir m'aider

<!-- BEGIN TEMPLATE: bbcode_code -->

14 réponses

Utilisateur anonyme
22 févr. 2007 à 13:21
Essaie comme ça :

int d=0;
for(int i=0;i<A.length-1;i++)
   if(A[i]==a && A[i+1]==b)
        d++;

J'ai du mal à cerner à quoi sert ton deuxième tableau. Sinon, on peut écrire le tout comme ça :

int d=0;
boolean trouve;
for(int i=0;i<A.length-B.length+1;i++)

   {trouve=true;
     for(int j=0;trouve==true && j<B.length;j++)
         if(A[i+j]!=B[j])
              trouve=false;
     if(trouve==true)
        d++;
   }

Le bout de code ci-dessus utilise l'algorithme naïf. Le mieux serait d'utiliser des tables de décalage si tu devais faire ça sur de très grands tableaux. A l'avenir, évite les fautes de frappe et d'orthographe car ça rend tes questions plus difficiles à comprendre et il est alors plus difficile de t'aider.
yeah! vive java
0
ulysse00 Messages postés 291 Date d'inscription lundi 6 novembre 2006 Statut Membre Dernière intervention 12 mai 2013 1
22 févr. 2007 à 14:54
salut merci mon ami pour tes conseilles mais just une question car je coince encore
la première solution marchera jamais car si j'igore les élléments de tableau A si j'ai {a,b,c,d}
for(int i=0;i<A.length-1;i++)
   if(A[i]==a && A[i+1]==b)
 c'est pour ça je cherche a mettre une boucle

et désolé je n'ai pas compris la deuxième solution
0
lafolle24320 Messages postés 406 Date d'inscription samedi 26 mars 2005 Statut Membre Dernière intervention 29 juin 2009 7
22 févr. 2007 à 16:25
Bonjour,
une solution un peu bof mais qui peut fonctionner :

String chaine1 ;
String chaine2;

//on va construire une première chaine qui aura la suite de caractères a trouver
for (int i ; i < tab.size ; ++i)
{
chaine1 = chaine1.concat(tab[i]);
}

//on va construire la chaine de caractère de ton tableau ou tu veux compter le nombre de chaine1
for (int i ; i < tab2.size ; ++i)
{
chaine2 = chaine2.concat(tab[i]);
}

//maintenant il te suffit de compter le nombre de fois que tu as la chaine1 dans //chaine2
int index;
int nbFois = 0 ;

while(chaine2 != null)
{
index = chaine2.lastIndexOf(chaine1) //on recherche le dernier index où l'on trouve la chaine 1;
if(index !=-1) // on a trouvé
{
nbFois++;
//on coupe la chaine2 et on continu
chaine2.substring(0, index - 1);
}
else
{
chaine2 = null;
}
}


Je pense que ce code peut fonctionner même si c'est un peu lourd

Bon courage

lafolle
0
lafolle24320 Messages postés 406 Date d'inscription samedi 26 mars 2005 Statut Membre Dernière intervention 29 juin 2009 7
22 févr. 2007 à 16:26
dsl je me suis trompé : j'ai mis tab[i] au lieu de tab2[i]

//on va construire la chaine de caractère de ton tableau ou tu veux compter le nombre de chaine1
for (int i ; i < tab2.size ; ++i)
{
chaine2 = chaine2.concat(tab2[i]);
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ulysse00 Messages postés 291 Date d'inscription lundi 6 novembre 2006 Statut Membre Dernière intervention 12 mai 2013 1
22 févr. 2007 à 17:45
merci mes amis mais si je considére que A et B deux listes ArrayListe
for (int i ; i < tab.size ; ++i)
{
    chaine1 = chaine1.concat(tab[i]);
}

je voulais utiliser
for (int i;i<A.size();i++)
{
mais je ne connais pas la suite
seulemnt pour mettre dans la chaine chaine1
0
ulysse00 Messages postés 291 Date d'inscription lundi 6 novembre 2006 Statut Membre Dernière intervention 12 mai 2013 1
22 févr. 2007 à 18:05
merci mes amis mais si je considére que A et B deux listes ArrayListe
string x ="123454";
for (int i = 0; i < B.size(); i++) {




String s1 = (String) B.get(i);
dd = dd.concat(s1);
}
    
    
     System.out.println(dd);
     int index;
int nbFois = 0 ;


while(dd != null)
{
  index = dd.lastIndexOf(x); 
  if(index !=-1) 
  {
      nbFois++;
   
     dd.substring(0, index - 1);
  }
  else
  {
    dd = null;
  }
}
System.out.println(nbFois);




        }


mais un message d'erreur


java.lang.StringIndexOutOfBoundsException: String index out of range: -1
0
Utilisateur anonyme
22 févr. 2007 à 18:34
int d=0;  //nombre d'occurences de B dans A
boolean trouve;  //signale si A se trouve dans B
//je boucle tant que j'ai assez de cases à tester
for(int i=0;i<A.length-B.length+1;i++)
   {trouve=true;  //je suppose que je tombe sur B
     for(int j=0;trouve==true && j<B.length;j++)
         if(A[i+j]!=B[j])  //si ça ne colle pas, alors je n'ai pas trouvé B
              trouve=false;
     if(trouve==true)   //si j'ai trouvé B dans A
        d++;                  //j'incrémente le nombre d'occurences de B dans A
   }

S'il te plaît, sois plus clair quand tu poses une question et évite les fautes d'orthographe. Un programmeur doit aussi faire attention à ce genre d'aspects.
yeah! vive java
0
Utilisateur anonyme
22 févr. 2007 à 18:54
[auteurdetail.aspx?ID=477889 lafolle24320]
, à mon avis, tu as une sacrée tendance à la complication. Si vous compliquez déjà les problèmes simples, vous compliquerez encore plus les problèmes compliqués. Dans mon code, je considère que A et B sont des tableaux. Si tu utilises des "ArrayList", remplace .length par .size() et [...] par .get(...). Si tu utilises les boucles for améliorées de Java 1.5, tu peux obtenir un code plus élégant. Si tu traites des chaînes de caractères, il y a déjà des fonctions toutes faites utilisant la détection d'expressions régulières. Sans aller si loin, tu peux utiliser la méthode indexOf() de la classe String jusqu'à ce que indexOf() te renvoie le même résultat que lastIndexOf() :

int index=0;                                   //indice de recherche du motif
int lastIndex=A.lastIndexOf(B);   //dernier indice où se trouve B dans A
int d;                                             //nombre d'occurences de B dans A
if(lastIndex!=-1)                           //si B apparait dans A
   {d=1;                                        //on compte une occurence
     //on boucle tant qu'on trouve B dans A et qu'on ne tombe pas sur
     //la dernière occurence de B dans A
     while((index=A.indexOf(B,index))!=lastIndex && index!=-1)
          d++;
   }
else                                            //si B n'apparait jamais dans A
   d=0;                                       //le nombre d'occurences est nul
    

yeah! vive java
0
lafolle24320 Messages postés 406 Date d'inscription samedi 26 mars 2005 Statut Membre Dernière intervention 29 juin 2009 7
22 févr. 2007 à 18:56
ton erreur est du à un déplacement de tableau
je n'ai pas vérifié le code que je t'ai passé à toi de vérifié et de voir où tu sors
 bon courage
lafolle
0
Utilisateur anonyme
22 févr. 2007 à 19:00
ava.lang.StringIndexOutOfBoundsException: String index out of range: -1

oui c'est une erreur, tu essaies d'aller à l'indice -1. Je testerai le code que je t'ai proposé demain. Essayez d'aller au plus simple. Ne partez pas sur des ArrayList sauf si c'est nécessaire.

yeah! vive java
0
lafolle24320 Messages postés 406 Date d'inscription samedi 26 mars 2005 Statut Membre Dernière intervention 29 juin 2009 7
22 févr. 2007 à 19:19
Voilà j'ai pris le temps de tester et çà marche !!! je n'ai pas commenter mais c'est la méthode que je t'ai présenté plus haut.

import java.util.*;

public class essai {

    static ArrayList A = new ArrayList();
    static ArrayList B = new ArrayList();
   
    static    String chaine1 = null;
    static String chaine2 = null;
   
    static public void main(String[] arg) throws InterruptedException
    {
               
        System.out.println("ajout dans A");
        A.add("a");
        A.add("b");
        A.add("a");
        A.add("b");
        A.add("c");
        A.add("a");
        A.add("b");
       
        System.out.println("ajout dans B");
        B.add("a");
        B.add("b");
       
        System.out.println(B);
        chaine1 = B.get(0).toString();
        for (int i = 1; i < B.size(); i++)
        {
            chaine1 = chaine1 + B.get(i).toString();
   
        }
        System.out.println("chaine1 :" + chaine1);
       
        chaine2 = A.get(0).toString();
        for (int i = 1; i < A.size(); i++) {
            chaine2 = chaine2 + A.get(i).toString();
   
        }
        System.out.println("chaine2 :" + chaine2);
           
//        maintenant il te suffit de compter le nombre de fois que tu as la chaine1 dans //chaine2
        int index;
        int nbFois = 0 ;
        String chaine3 = null;
        chaine3 = chaine2;
        while(chaine2 != null)
        {
            System.out.println("chaine3     :" + chaine3);
          index = chaine3.lastIndexOf(chaine1); //on recherche le dernier index où l'on trouve la chaine 1;
          if(index !=-1) // on a trouvé
          {
              nbFois++;
              //on coupe la chaine2 et on continu
             chaine3 = chaine2.subSequence( 0,index).toString();
           
          }
          else
          {
            chaine2 = null;
          }
        }
        System.out.println("Nombre de fois :" + nbFois);

                 
    }
}

Bonne prog

lafolle
0
ulysse00 Messages postés 291 Date d'inscription lundi 6 novembre 2006 Statut Membre Dernière intervention 12 mai 2013 1
22 févr. 2007 à 23:08
merci mes amis just une derniere question
public static void main(String[] args)   {
    ArrayList A = new ArrayList();
    A.add("a" );
    A.add("h" );
    A.add("v" );
    A.add("v" );
    A.add("h" );
    A.add("v");
    A.add("v");
   


   ArrayList B = new ArrayList();
   B.add("a" );
   B.add("h" );
   B.add("v");
  
  
   ArrayList F = new ArrayList();
  int d=0;
  for (int i =0;i<B.size();i++){
    for (int j =0;j<A.size();j++){
     String Q1=B.get(i).toString();
     String Q2=A.get(j).toString();
        if (Q1.equals(Q2)==true){
        d++;
       
    
     }
       
    }
   
    
 
   
     System.out.println("le support de " +  B.get(i) +" "+"égal :"+  d);
     d=0;
  }
 
  }

je cherche de mettre résultat d dans la liste F donc j'aurais F= {1,2,4}  puis ajouter une condition if (d<1) alors supprimer a de la liste B alors j'aurais B={h,v}

merci encore
0
ulysse00 Messages postés 291 Date d'inscription lundi 6 novembre 2006 Statut Membre Dernière intervention 12 mai 2013 1
25 févr. 2007 à 17:11
salut j'ai malheureusement encore un problème j'ai tenté de trouvé la solution voila le code
publicstaticvoid main(String[] args)
    { 
        ArrayList A = new ArrayList();
        A.add("a");
        A.add("h");
        A.add("v");
        A.add("v");
        A.add("h");
        A.add("v");
        A.add("v");  
       
        ArrayList B = new ArrayList();
        B.add("a");
        B.add("h");
        B.add("v");
       
        ArrayList F = new ArrayList();
        int d=0;
        for(int i=0;isize();i++)
        { 
            String Q1=B.get(i).toString();
            for(int j =0;jsize();j++)
            {
                String Q2=A.get(j).toString();
                if(Q1.equals(Q2)==true) 
                    d++;
            }
           
            F.add(d);
            d = 0;
        }
       
        System.out.print(Arrays.toString(F.toArray())); // Affiche [1, 2, 4]
       
        for(int i=0;i<F.size();i++)
        { 
            d = (Integer) F.get(i);
            if(d <= 1)
                B.remove(i);
        }
       
        System.out.print(Arrays.toString(B.toArray())); // Affiche [h, v]
    }

mais des message d'erreur

"arry.java": cannot resolve symbol: method add (int)in class java.util.ArrayList at line 39, column 18
"arry.java": cannot resolve symbol: variable Arrays in class aa.arry at line 43, column 29
"arry.java": incompatible types;found : java.lang.Integer,required: int at line 47, column 20
"arry.java": cannot resolve symbol: variable Arrays in class aa.arry at line 52, column 29
0
Utilisateur anonyme
26 févr. 2007 à 15:18
Mets plutôt F.add(new Integer(d));
Tu dois être en java 1.4 à mon avis.

yeah! vive java
0
Rejoignez-nous