Je n'arrive pas a compter le nombre dans un tableau
ulysse00
Messages postés291Date d'inscriptionlundi 6 novembre 2006StatutMembreDernière intervention12 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 -->
A voir également:
Java compter le nombre d'occurence dans un tableau
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
ulysse00
Messages postés291Date d'inscriptionlundi 6 novembre 2006StatutMembreDernière intervention12 mai 20131 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
lafolle24320
Messages postés406Date d'inscriptionsamedi 26 mars 2005StatutMembreDernière intervention29 juin 20097 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
lafolle24320
Messages postés406Date d'inscriptionsamedi 26 mars 2005StatutMembreDernière intervention29 juin 20097 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]);
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
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
[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
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.
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);
ulysse00
Messages postés291Date d'inscriptionlundi 6 novembre 2006StatutMembreDernière intervention12 mai 20131 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}
ulysse00
Messages postés291Date d'inscriptionlundi 6 novembre 2006StatutMembreDernière intervention12 mai 20131 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++;
}
"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