Je suis coincé sur une mission de Java pour une classe où nous devons faire un jeu de pendentif, mais un très basique (c'est une classe d'introduction à Java). Fondamentalement, j'ai un mot saisi par quelqu'un et l'autre personne doit deviner la Parole, mais ils ne voient pas le mot, donc il l'affiche comme ceci par exemple (si le mot est Aardvark)
* * * * * * * * * * p>
Ensuite, l'utilisateur entrait une lettre et si sa partie du mot, il affiche ces lettres, exemple: p>
Entrée lettre: un
A * * * * a * * p>
Entrée lettre: K
A * * * * a * k p>
Entrée lettre: R
un r * * a r k p>
et donc un ... Alors oui, j'ai été coincé dessus pendant un moment et j'ai vraiment besoin d'aide Merci P>
PS: Ceci est une classe d'intro, tout ce que je sais jusqu'à présent, des boucles (pour, tandis que, etc.), si, if / sinon, commutateurs, etc. P>
import java.util.Scanner;
public class ass_2 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// public static final Comparator<secretWord> CASE_INSENSITIVE_ORDER;
int attempts = 10;
int wordLength;
boolean solved;
Scanner userInput = new Scanner(System.in);
System.out.println("OK Guessing Player ... turn around, while your friend enters the word to guess!\n");
System.out.println("Other Player â Enter your word (letters only, no repeated letters and not case sensitive):");
String secretWord = userInput.next();
// 20 blank spaces WITH a for loop, we're smart!
for(int i = 1; i <= 20; i++)
System.out.print("\n");
Scanner userLetter = new Scanner(System.in);
String letter;
System.out.print("Word to date: ");
for (int i = 0; i < secretWord.length(); i++)
{
System.out.print("*");
}
while (attempts <= 10 && attempts > 0)
{
System.out.println("\nAttempts left: " + attempts);
System.out.print("Enter letter: ");
attempts--;
}
System.out.println("\n---------------------------");
System.out.println("Sorry you didn't find the mystery word!");
System.out.println("It was \"" + secretWord + "\"");
}
5 Réponses :
stocker un tableau de caractères identique à la même longueur que le mot secret. Initialiser les caractères à * code> et quand une correspondance est trouvée, à l'aide de [indexof] [1] code>, révèle les caractères trouvés: String secretWord = userInput.next();
int len = secretWord.length(); //Store the length which will be used to see if puzzle was solved.
char[] temp = new char[len]; //Store a temp array which will be displayed to the user
for(int i = 0; i < temp.length; i++) //initialize the array
{
temp[i] = '*';
}
System.out.print("\n");
System.out.print("Word to date: ");
while (attempts <= 10 && attempts > 0)
{
System.out.println("\nAttempts left: " + attempts);
System.out.print("Enter letter: ");
String test = userInput.next();
if(test.length() != 1)
{
System.out.println("Please enter 1 character");
continue;
}
char testChar = test.charAt(0);
//Find matches
int foundPos = -2;
int foundCount = 0; //How many matches did we find
while((foundPos = secretWord.indexOf(testChar, foundPos + 1)) != -1)
{
temp[foundPos] = testChar; //Update the temp array from * to the correct character
foundCount++;
len--; //Decrease overall counter
}
if(foundCount == 0)
{
System.out.println("Sorry, didn't find any matches for " + test);
}
else
{
System.out.println("Found " + foundCount + " matches for " + test);
}
//Print
for(int i = 0; i < temp.length; i++)
{
System.out.print(temp[i]);
}
System.out.println();
if(len == 0)
{
break; //Solved!
}
attempts--;
}
if(len == 0)
{
System.out.println("\n---------------------------");
System.out.println("Solved!");
}
else
{
System.out.println("\n---------------------------");
System.out.println("Sorry you didn't find the mystery word!");
System.out.println("It was \"" + secretWord + "\"");
}
Est-il possible de le faire sans utiliser de tableaux?
@jordan Tout est possible, stockez une copie de la chaîne visible par l'utilisateur. mais pourquoi???
Donner à la réponse n'aide pas à un novice apprendre comment i> à proposer une réponse.
Nous ne sommes pas autorisés à utiliser des tableaux pour la mission, qui est assez stupide
Ce n'est pas si stupide, l'objectif est de vous rendre plus capable de trouver des solutions originales.
Ici, par exemple, vous travaillez avec des chaînes, il serait donc logique d'aller sur le Javadoc et de voir la page de chaîne , pour voir si une fonction pouvait être pratique.
Ensuite, vient la logique: vous obtenez une entrée "chaîne", puis obtenez une entrée "Chart" et vous devez comparer une chaîne avec un char. Donc, le meilleur moyen est de comparer chaque "char" de votre "chaîne".
Vous ne pouvez pas utiliser des tableaux? OK Ensuite, vous pouvez également utiliser des boucles et deux fonctions de cordes (vous connaissez déjà la longueur (), qui est l'une des deux), ce qui donnera le même résultat que de traverser un tableau pour tester chacun de son élément.
Le jeu fin si non * est affiché ou s'il ne reste plus de tentatives, le joueur peut donc essayer tant que aucune de ces conditions n'est vraie. P>
+1 Je voulais +1 Votre commentaire mais c'est parti alors je suis + 1ing votre réponse. J'espère que je n'ai pas donné trop d'aide dans ma réponse.
Hey Jordan, votre première tentative a l'air très bien! Vous n'avez besoin que de plus de logique à l'intérieur de la boucle tandis que de lire des suppositions et de remplacer "*" s avec des suppositions correctes. Et je vous conseillerais de stocker le mot obscurcié ("***** ...") dans une chaîne également au lieu de simplement l'imprimer, sera pratique plus tard.
juger par votre code que vous n'avez pas T Besoin d'une aide sur l'utilisateur de l'utilisateur, votre seul problème est de remplacer correctement les étoiles avec des suppositions droites, permet de y arriver: p> maintenant la chose cool est ceci: p > ... pas de lettres répétées ... p>
BlockQuote> qui rendra votre mission beaucoup plus facile! Regardez la documentation de la classe de cordes fournie par Williwaw. Vous trouverez deux méthodes avec lesquelles conduiront à la solution: p> Je pense que vous trouverez la solution facilement. N'hésitez pas à poser d'autres questions dans les commentaires! P> EDIT: Quelques aides supplémentaires strong> P>
String secret = "example-text";
String displaySecret = "";
for (int i = 0; i < secret.length(); i++)
displaySecret += "*";
char guess;
//read in a guess
int position = secret.indexOf(guess);
//now position contains the index of guess inside secret, or
//-1 if the guess was wrong
String newDisplaySecret = "";
for (int i = 0; i < secret.length(); i++)
if (i == position)
newDisplaySecret += secret.charAt(i); //newly guessed character
else
newDisplaySecret += displaySecret.charAt(i); //old state
displaySecret = new String(newDisplaySecret);
Je ne comprends toujours pas comment obtenir les étoiles dans la chaîne d'affichageecret, je sais comment afficher une étoile puis utilise une boucle pour l'afficher autant de fois que la longueur du mot, mais elle
@Jordan quand affichez-vous un ''? Lorsque le personnage entré et ceux entrés avant ne sont pas le caractère, le " i>" prendra la place de. En outre, je n'ai même pas remarqué que "... pas de lettres répétées ..."> _
Je comprends la logique de celui-ci, mais honnêtement, je ne peux pas sembler le faire codé lol, donc si le personnage saisi par l'utilisateur ne correspond pas à une lettre dans le mot, il affiche une étoile puis si elle correspond à ce qu'il correspond tout simplement ne rien faire et afficher la lettre originale, mais il doit vérifier chaque lettre dans la chaîne une à la fois, alors en utilisant un pour boucle
Ok, j'ai essayé votre code, ça marche (et j'ai changé quelques choses) Cependant, pour une raison quelconque, il double la Parole, comme si la Parole était "Bob" dans les étoiles, il afficherait beaucoup ****** merci beaucoup Au fait pour toute cette aide!
En fait, je viens de le comprendre, je mets le système.Out.println dans la boucle, c'est pourquoi il a doublé la longueur, jusqu'à présent si bonne! Maintenant, je vais essayer de m'attaquer au reste!
OK, le code fonctionne donc, mais j'ai essayé de la mettre en œuvre dans une boucle de While pour surveiller la quantité de tentatives et maintenant, lorsqu'elle entrera dans la boucle d'affichageCret, il continue à duplier tout ce qui est stocké là-bas, je pense qu'il a quelque chose faire avec NewdisplaySecret + = secret.chardat (i);
@Jordan essaie de remplacer newdisplaySecret = "" avec newdisplaySecret = nouvelle chaîne (""). De plus: Pourquoi ne mettez-vous pas à jour le code dans votre question si vous trouvez un temps libre?
Je vais vous donner une idée de base du code sur lequel vous pouvez construire:
paquet arr_game; p> blockQuote>
xxx pré> h2>
Qu'est-ce que vous avez jusqu'à présent et où êtes-vous coincé?
J'ai ajouté le code au poste d'origine
OK super. Qu'est-ce que tu es coincé?
Votre boucle pour la boucle semble vraiment étrange ... Pouvez-vous vous assurer que vous avez correctement collé le code.
Votre boucle
pour code> n'est pas formatée correctement.Vous voudrez peut-être renommer votre classe à quelque chose qui ne contient pas le mot «cul». Mes professeurs ne l'appréciaient jamais :)
Bon code est corrigé, le cul représente la mission :) Donc, je n'ai aucune idée de l'affichage du caractère saisi par l'utilisateur dans la position correcte (il affiche donc le * caché les autres lettres, mais si elles sont entrées dans la bonne lettre si l'afficherait, voir exemple ci-dessus :)
Une solution consiste à stocker chaque caractère éprouvé et lors de l'affichage du mot, vérifiez si le caractère suivant à afficher a été essayé. Si oui, affichez le caractère, sinon, affichez *.
@Jordan: essayez de vous concentrer sur votre problème immédiat au lieu de toute la mission. Donc, le problème est de rendre le mot actuel correctement. Si le mot est «bonjour» et aucune lettre n'est sélectionnée, elle devrait être «*****». Si, disons la lettre 'l' est connue, vous voulez afficher ' * ll i>; Essayez d'abord de résoudre ce problème puis soulevez-vous du reste de la complexité. En général, vous devriez décomposer vos problèmes en morceaux de plus petits morceaux, puis la pièce à la fin.
@c_marker ouais, c'est exactement ce que je veux comprendre comment faire! Je sais comment faire afficher les étoiles (utilisez simplement la longueur de la chaîne) mais je n'arrive pas à saisir comment le faire afficher la lettre si c'est correct, j'ai essayé d'utiliser l'index de (); Mais je ne peux pas comprendre
@Jordan: Vous pouvez commencer par essayer d'écrire une méthode qui prend un mot et une lettre. Pour chaque lettre dans le mot, vérifiez si la lettre est égale à celle qui a été transmise. Sinon, imprimez un '*', sinon imprimez la lettre. Au lieu de modifier votre code actuel, commencez à partir de zéro pour cela ... Tout le code existant pourrait simplement vous confondre.
Êtes-vous autorisé à utiliser des tableaux?
@Williwaw cirse non, il dit que nous ne sommes pas autorisés à utiliser des tableaux