Bonjour a tous, je suis étudiant et m’exerce en programmation simple.
Le but du programme est de générer tous les mots possibles avec 2a et 3b ( ex: aabbb ababb babab etc…) sans utiliser la recursion a l’aide d’un mantien de pile.
Voici le code :
import java.util.*;
public class Back{
final int maxA=2; final int maxB=3;
int na,nb;
java.util.Stack<Character>pile;
public Back(){
this.na=this.nb=0;
this.pile=new Stack<Character>();
}
public int nextChar(int pos, int nxt){ // Sert a établir le prochain charactere a insérer , a l'aide d' entiers :
// 0--> a 1--> b (-1)--> rien
if(nxt==0 && na<maxA) return 0;
if(nxt==1 && nb>=maxB && na<maxA) return 0;
if(nxt==1 && nb<maxB) return 1;
if(nxt==0 && na>=maxA && nb<maxB) return 1;
return -1;
}
public void genSol(){
int nxt=0; int pos=0;
while(pos>=0){
nxt=nextChar(pos,nxt);
while(nxt>=0){
if(nxt==0) pile.push('a'); else pile.push('b');
if(nxt==0) na++; else nb++;
if(na+nb==maxA+maxB) printSol();
pos++;
nxt=nextChar(pos,nxt);
}
if(!pile.empty()){
Character c=pile.pop(); pos--;
if(c=='a'){ na--; nxt=1;} else{ nb--; nxt=-1;} /* Cette derniere étape est celle qui pose probleme */
}
}
}
public void printSol(){
Character[]t=new Character[this.pile.size()];
for(int i=t.length-1; i>=0; i--) t[i]=this.pile.pop();
for(int i=0; i<t.length; i++){
System.out.print(t[i]);
this.pile.push(t[i]);
}
System.out.println();
}
public static void main(String[] args) {
Back b=new Back();
b.genSol();
}
}
Le probleme : il me genere aabbb abbba et reste coincé en me generant a l’infini abbba . Je vois bien ou est le probleme, mais je ne sait pas le résoudre.
Si une ame genereuse pouvait m’éclaircir je l’en remercierais!
Sur ce je vais manger, bon app a tous !