j'ai actuellement un exercice ou je dois demander d'entrée une chaine de caractère tout en sachant que certain caractère sont interdit, pour celà mon prof demande que l'on se serve de la méthode charAt() et indexOf() et que le tout soit utiliser avec le contenu appris jusque là s'est à dire variable et boucle while.
j'ai donc une fenêtre prompt demandant à l'utilisateur d'entrée une chaine de caractère exemple bonjour. => comme s'est correct je l'imprime à l'écran.
deuxième possibilité l'utilisateur écrit bonjour&, "&" étant un caractère interdit je vais donc entrée dans une boucle ou en premier lieu une alert va dire à l'utilisateur qu'il à entrée le caractère interdit en lui indiquant lequel "&" suivit d'un nouveau prompt pour demander de rectifier le tir.
jusque là tout va bien j'entre dans la boucle, voilà mon soucis une fois dans la boucle si je choisit d'entrée le 2em caractère interdit ":" l'alert ne va montrer que le "&" utiliser à l'entrée de la boucle mon deuxième problème résidant dans le fait qu'une fois dans la boucle si je décide d'entrée une string correct il ne sortira pas de la boucle il y restera.
je bloque et je ne trouve pas comment résoudre se problème, la seul solution que j'ai trouver étant de mettre un break à la fin de la boucle se qui me permet de sortir de la boucle mais si l'utilisateur tape "bonjour&" le résultat imprimer sera bonjour& et non pas un retour dans la boucle se qui est normal.
Dans les fait j'ai réussit l'exercice car j'ai atteint l'objectif demander mais je n'aime pas la manière dont j'ai dut m'y prendre et j'aimerais donc avoir vos lumière quand à une solution plus propre.
je vous met le code pour que vous y jetiez un oeil :
var phrase = prompt("dite-moi quelque chose :", "");
var interdit = phrase.charAt(phrase.indexOf("&"));
var pasPermis = phrase.charAt(phrase.indexOf(":"));
var non = interdit || pasPermis;
var test = phrase.charAt(phrase.length -1);
while(test === pasPermis || interdit) {
alert("Vous avez utiliser un caractère interdit : " + test);
phrase = prompt("Réessayer ! ", "");
break;
}
document.writeln(phrase);
encore une fois ma solution devrait se trouver sous la forme de mes connaissances actuel s'est à dire les méthode string, array, variable, et boucle while.
Ton code actuel ne fonctionne pas, si tu rendre dans le while tu as aucun moyen d'en sortir !
Il faudrait que tu remettes le code ou tu set les variables interdit, pasPermis et test dans la boucle.
Et au passage tu utilises pas la variable "non"
Connais tu la boucle for et la boucle do...while ?
Si oui tu as cette solution :
var char_interdit = ['&', ':']; // liste des caractères interdits
do {
var phrase = prompt("dite-moi quelque chose :", "");
var valid = true;
for (var i in char_interdit) {
if(phrase.indexOf(char_interdit[i]) !== -1) {
valid = false;
alert("Vous avez utiliser un caractère interdit : " + char_interdit[i]);
break;
}
}
} while (!valid);
Ici je trouve le do...while plus adapté que while car tu fais l'action au moins une fois, et tu la répètes tant que c'est pas bon.
Et le for, pour le coup c'est "optionnel", c'est juste pour gérer plus proprement la liste des caractères interdit
en utilisant seulement des while, c'est assez restrictif, mais voilà une solution :
// On liste les caractères interdits
var forbid = "&:";
// On demande une phrase à vérifier
var phrase = prompt("Dites-moi quelque chose : ", "");
// Tant qu'on a une phrase à vérifier
checkPhrase : while (phrase) {
// On regarde à partir du premier caractère
var index = 0;
// On regarde un caractère interdit à la fois
while (index < forbid.length) {
// On regarde si ce caractère interdit se trouve dans la phrase.
if (phrase.indexOf(forbid.charAt(index)) >= 0) {
// Si oui, on demande une nouvelle phrase à vérifier
phrase = prompt("Vous avez utilisé un caractère interdit : " + forbid.charAt(index) + "\n\nRéessayez !", "");
// On ne regarde pas les autres caractères, on relance directement la vérification
continue checkPhrase;
}
// On passe au caractère suivant
index++;
}
// Si on arrive jusqu'ici, c'est qu'il n'y a eu aucun caractère interdit.
alert("Félicitation, vous avez réusi !");
break;
}
Edit : ah, 30 sec après Romain Oui, si tu peux utiliser do while et for, n'hésite pas Et mon chartAt n'est pas forcément la meilleur solution, c'est plus pour l'utiliser et faire plaisir à ton prof
bonjour, tout d'abord merci à vous deux car celà m'aide énormément romain-valin oui je sais qu'il existe d'autre type de boucle néanmoins comme le prof avait donner un exercice sur des élément js que l'on vient d'apprendre je souhaitais m'en servir, car je partais du principe qu'il n'aurait pas donner un exercice réalisable avec des choses pas encore apprises.
Néanmoins merci, tout est à prendre surtout maintenant que j'apprend et que je me suis donner comme objectif de vraiment maitriser le javascript
@Syltaen, merci d'avoir répondu et merci d'avoir utiliser uniquement les éléments en ma connaissance, je ne dénigre pas romain et sa solution car je serais bien présomptueux de le faire néanmoins ta solution me permet de voir tout se que je peut mettre dans le prompt par exemple, car au départ j'étai partit comme toi "prompt("Vous avez utilisé un caractère interdit : "+ forbid.charAt(index) + "\n\nRéessayez !", "")" mais moi j'avais eu une erreur se qui me conforte dans l'idée que j'ai fait une erreur d'écriture.
J'ai néanmoins quelque question pratique sur ton code qu'est ce que le checkPhrase : qu'est-ce que s'est ? une variable ? fonction ? un commentaire ?
Mais au final, le continue ne sert qu'a empêcher le message "Vous avez réussi" de s'afficher. Tu peux le remplacer par un break, et puis utiliser une autre vérification pour afficher le message de réussite :
var forbid = "&:";
var phrase = prompt("Dites-moi quelque chose : ", "");
while (phrase) {
var index = 0;
while (index < forbid.length) {
if (phrase.indexOf(forbid.charAt(index)) >= 0) {
phrase = prompt("Vous avez utilisé un caractère interdit : " + forbid.charAt(index) + "\n\nRéessayez !", "");
break;
}
index++;
}
// Si on a vérifié tous les caractères interdits
if (index >= forbid.length) {
alert("Félicitation, vous avez réusi !");
break;
}
}
Je pensais aussi, mais apparemment ça ne marche pas en JS, il faut utiliser des label.
Problème de boucle
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Développeur PHP / Symfony en Freelance
Développeur PHP / Symfony en Freelance