A voir également:
- Toutes les possibilités de n caractères
- Caractères ascii - Guide
- Caractères spéciaux - Guide
- Caractères spéciaux mac - Guide
- Exemple de mot de passe à 8 caractères - Guide
- Caracteres speciaux - Guide
4 réponses
Bien Reçu votre problème est très intéressant moi aussi je suis débutant avec java mais j'ai un bon niveau en language C t'inquiète je vais trouver une solution et je vais communiquer la solution avec toi reste a jour sur la page ;)
Tu pourrais utiliser le code que j'avais mis ici : Permutations d'éléments de matrice
Il faudra juste faire une classe de test qui correspond à tes besoins.
Il faudra juste faire une classe de test qui correspond à tes besoins.
J'ai Résolue ton problème en 2 classe :
classe1.java qui met tout les probabilité possible dans une LinkedList
classe2.java qui demande a l'utilisateur d'entrer le nombre n puis fait appelle a classe1 et met le contenut de la list dans un fichier resultat
classe1.java
{
public class Prob {
public void longueur(int n){
int longueur = 0 ;
for(int i=n;i>0;i--){
longueur+=java.lang.Math.pow(26, i);
}
Res = new ArrayList(longueur);}
public int getNbrLigne(int n,int NbrL){
NbrL=1;
for(int i=0;i<n;i++){
NbrL*=26;
}
return NbrL;
}
public int remplirList(int nbrl,int j,int n,int in,char[] lettre){
int lettrewait = 1;
int i;
for(i=0;i<n-in;i++){
lettrewait*=26;
}
int comptl=0;
int anc=j;
i=0;
while(j<nbrl+anc){
if(comptl<lettrewait){
if(i>25){i=0;}
try{
Res.set(j, ""+Res.get(j)+lettre[i]);}
catch(Exception e){Res.add(lettre[i]);}
comptl++;
}
else{comptl=0;
i++;
if(i>25){i=0;}
try{Res.set(j, ""+Res.get(j)+lettre[i]);}
catch(Exception e){Res.add(lettre[i]);}comptl++;}
j++;
}
return j;
}
public void resultat(int n){
char[] lettre={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
int k=1;
int nbrl=1;
int j=0;
int aide=0;
this.longueur(n);
while(k<=n){
nbrl=this.getNbrLigne(k,nbrl);
int in=1;
while(in<=k){
j=this.remplirList(nbrl, aide,k, in, lettre);
in++;
}
aide=j;
k++;
}
}
List Res;
}
}
classe2.java c'est la classe main
{
public static void main(String[] args) {
int i;
Scanner sc = new Scanner(System.in);
System.out.println("Veuillez Entrez un numero :");
int n = sc.nextInt();
Calc tab = new Calc();
tab.resultat(n);
File f = new File ("resultat.txt");
try
{
PrintWriter pw = new PrintWriter (new BufferedWriter (new FileWriter (f)));
for(i=0;i<tab.Res.size();i++){
pw.println(tab.Res.get(i));
}
pw.close();
}
catch(Exception e){}
}
}
Ca marche très très bien il suffit de tester ,mais je peut pas vous expliquez le code dans un commentaire
classe1.java qui met tout les probabilité possible dans une LinkedList
classe2.java qui demande a l'utilisateur d'entrer le nombre n puis fait appelle a classe1 et met le contenut de la list dans un fichier resultat
classe1.java
{
public class Prob {
public void longueur(int n){
int longueur = 0 ;
for(int i=n;i>0;i--){
longueur+=java.lang.Math.pow(26, i);
}
Res = new ArrayList(longueur);}
public int getNbrLigne(int n,int NbrL){
NbrL=1;
for(int i=0;i<n;i++){
NbrL*=26;
}
return NbrL;
}
public int remplirList(int nbrl,int j,int n,int in,char[] lettre){
int lettrewait = 1;
int i;
for(i=0;i<n-in;i++){
lettrewait*=26;
}
int comptl=0;
int anc=j;
i=0;
while(j<nbrl+anc){
if(comptl<lettrewait){
if(i>25){i=0;}
try{
Res.set(j, ""+Res.get(j)+lettre[i]);}
catch(Exception e){Res.add(lettre[i]);}
comptl++;
}
else{comptl=0;
i++;
if(i>25){i=0;}
try{Res.set(j, ""+Res.get(j)+lettre[i]);}
catch(Exception e){Res.add(lettre[i]);}comptl++;}
j++;
}
return j;
}
public void resultat(int n){
char[] lettre={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
int k=1;
int nbrl=1;
int j=0;
int aide=0;
this.longueur(n);
while(k<=n){
nbrl=this.getNbrLigne(k,nbrl);
int in=1;
while(in<=k){
j=this.remplirList(nbrl, aide,k, in, lettre);
in++;
}
aide=j;
k++;
}
}
List Res;
}
}
classe2.java c'est la classe main
{
public static void main(String[] args) {
int i;
Scanner sc = new Scanner(System.in);
System.out.println("Veuillez Entrez un numero :");
int n = sc.nextInt();
Calc tab = new Calc();
tab.resultat(n);
File f = new File ("resultat.txt");
try
{
PrintWriter pw = new PrintWriter (new BufferedWriter (new FileWriter (f)));
for(i=0;i<tab.Res.size();i++){
pw.println(tab.Res.get(i));
}
pw.close();
}
catch(Exception e){}
}
}
Ca marche très très bien il suffit de tester ,mais je peut pas vous expliquez le code dans un commentaire
Dans le cas présent, utiliser une LinkedList n'est pas très utile: on a pas besoin de ses fonctionnalités, d'autant plus que tu la boxes dans une interface List simple.
Utilise un ArrayList à la place, et pour accélérer le tout, précise à l'avance la taille de la List comme ceci:
Utilise un ArrayList à la place, et pour accélérer le tout, précise à l'avance la taille de la List comme ceci:
public void resultat(int n){ Res = new ArrayList(java.lang.Math.pow(26, n));Comme ça java n'a pas à agrandir la liste à chaque fois.
Merci Gravgun pour votre aide, mais la longueur n'est pas 26 à la puissance n mais 26^n +26^n-1+...+26^1.
car il veut pour n = 2 ; a b c d .... z aa ab ....ba bb ............... za zz
Ben j'ai modifié le code vérifier svp est ce que c ça
Et comme j'ai signalé au début je suis un débutant en java et j'espère améliorer mon niveau avec vous donc si vous avez d'autre remarques ou d'autre conseilles n'hésiter pas
Cordialement
car il veut pour n = 2 ; a b c d .... z aa ab ....ba bb ............... za zz
Ben j'ai modifié le code vérifier svp est ce que c ça
Et comme j'ai signalé au début je suis un débutant en java et j'espère améliorer mon niveau avec vous donc si vous avez d'autre remarques ou d'autre conseilles n'hésiter pas
Cordialement
Bonjour,
S'il ne s'agit que d'afficher les résultats, je pense qu'une fonction récursive reste le plus simple:
Libre ensuite d'adapter, mais un conseil, le nombre de possibilités étant relativement grand, ne prévoyez pas de stocker les résultats sans risque d'exploser votre mémoire. Sinon au lieu d'écrire sur la sortie standard vous pouvez adapter pour écrire dans un fichier, par exemple.
~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~
S'il ne s'agit que d'afficher les résultats, je pense qu'une fonction récursive reste le plus simple:
public class TestLoop { public static char[] LETTERS = new char[]{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'}; private static void treatLoop(int loopNumber, String base){ int iter = 0; while(iter < LETTERS.length){ if (loopNumber <= 1){ System.out.println(base.concat(String.valueOf(LETTERS[iter]))); } else { treatLoop(loopNumber - 1, base.concat(String.valueOf(LETTERS[iter]))); } iter++; } } public static void main(String[] args){ int nbLoop = 5; treatLoop(nbLoop , ""); } }
Libre ensuite d'adapter, mais un conseil, le nombre de possibilités étant relativement grand, ne prévoyez pas de stocker les résultats sans risque d'exploser votre mémoire. Sinon au lieu d'écrire sur la sortie standard vous pouvez adapter pour écrire dans un fichier, par exemple.
~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~