Question

1) La première boucle que je dois utiliser est un do/while.Dans cette boucle, l'utilisateur est invité à saisir un mot.Si l'utilisateur tape un mot incorrect, il obtient un message d'erreur :

Invalide!Essayer à nouveau!Il reste 2 tentatives !

Invalide!Essayer à nouveau!Il reste 1 tentative(s) !

Désolé!Il ne vous reste plus aucune tentative !

Cette sortie fonctionne tant qu'un mauvais mot est saisi à chaque fois, mais si le mot correct est saisi après 1 tentative infructueuse, le message d'erreur s'applique toujours.

2) Dans ma deuxième boucle (boucle for), l'utilisateur est invité à saisir "3 * 8 = ". Cette partie de la boucle fonctionne correctement si un mauvais nombre est saisi toutes les 3 fois ou si 24 est saisi à chaque tentative.

Le problème réside dans la boucle après la saisie de 24.Le résultat est le suivant :

Merci bla bla.Nous vous appellerons au 5555555555 si vous êtes gagnant. 3 * 8 = Où le 3*8 ne devrait pas apparaître.Je me rends compte que je pourrais entrer dans une pause ;après cette déclaration, mais les instructions indiquent spécifiquement que je ne peux pas utiliser la commande break.

La sortie correcte devrait être la suivante : Merci bla bla.Nous vous appellerons au 5555555555 si vous êtes gagnant.

public static void main(String[] args)
{
    Scanner input = new Scanner(System.in);

    int attempt = 2;
    int answer = 24;
    long phoneNumber = 0;
    String firstName = "";
    String lastName = "";
    String wordOfTheDay = "";

    System.out.printf("Enter the word of the day:  ");
    wordOfTheDay = input.nextLine();

    if(wordOfTheDay.equals("tired"))
    {
        for( attempt = 2; attempt >= 0; --attempt)
        {
            System.out.print(" 3 * 8 = ");
            answer = input.nextInt();
            input.nextLine();

            if( answer == 24)
            {
                System.out.printf( "Please enter your first name, last name, and phone number (no dashes or spaces)\n"                              +"in a drawing for an all-expenses-paid vacation in the Bahamas: " );

                firstName = input.next();
                lastName = input.next();
                phoneNumber = input.nextLong();

                System.out.printf(
                    "Thank you %s %s. We'll call you at %d if you're a winner.",
                    firstName,
                    lastName,
                    + phoneNumber);
            }

            else if( answer != 24)
            {
                if(attempt!=0)
                {
                    System.out.printf( "Invalid! Try Again! %d attempt(s) left!\n ", attempt);
                    continue;
                }
                else
                {
                    System.out.print( "Sorry!  You have no more attempts left!" );
                }
            }
        }
    }
    else
    {
        do
        {
            System.out.printf( "Invalid! Try Again! %d attempt(s) left!\n ", attempt);
            --attempt;
            System.out.printf("Enter the word of the day:  ");
            wordOfTheDay = input.nextLine();
        } while (attempt >= 1);

        if( attempt == 0)
        {
            System.out.print( "Sorry!  You have no more attempts left!" );
        }
    }
}

J'espère avoir été assez clair.

Pour récapituler, je dois résoudre le problème avec mon do/tout en ne me laissant pas saisir le mot correct après une tentative infructueuse.

De plus, je dois me débarrasser du 3 * 8 = qui apparaît une fois que les utilisateurs ont saisi la bonne entrée.

Était-ce utile?

La solution

Normalement, vous utiliseriez le break déclaration, mais comme vous n'êtes pas autorisé à définir attempt = -1 aura le même effet :

if( answer == 24)
{
    ...
    attempt = -1; // An ugly 'break'
}

MODIFIER:

Bouge le do { } while(); avant if vérifier:

    // These two lines of code are no longer required.
    //System.out.printf("Enter the word of the day:  ");
    //wordOfTheDay = input.nextLine();

    do
    {
        System.out.printf("Enter the word of the day:  ");
        wordOfTheDay = input.nextLine();

        if(!wordOfTheDay.equals("tired"))
        {
            System.out.printf(
                "Invalid! Try Again! %d attempt(s) left!\n ", --attempt);
        }
        else
        {
            attempt = 0; // Another ugly 'break'
        }
    } while (attempt >= 1);


    if(wordOfTheDay.equals("tired"))
    {
    }
    // Remove else branch as not required.

Autres conseils

Je pense que vous essayez de faire cela.!

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        int answer = 0;
        long phoneNumber = 0;
        String firstName = "";
        String lastName = "";
        String wordOfTheDay = "";

        int mainMenuAttempt = 3;
        do {
            System.out.printf("Enter the word of the day:  ");
            wordOfTheDay = input.nextLine();

            if (wordOfTheDay.equals("tired")) {

                int answerAttempt = 3;
                do {
                    System.out.print(" 3 * 8 = ");
                    answer = input.nextInt();
                    input.nextLine();
                    answerAttempt--;

                    if (answer != 24 && answerAttempt >0)
                        System.out.printf(
                                "Invalid! Try Again! %d attempt(s) left!\n ",
                                answerAttempt);

                } while (answerAttempt >0 && answerAttempt < 3 && answer != 24);

                if (answer == 24) {
                    System.out
                            .printf("Please enter your first name, last name, and phone number (no dashes or spaces)\n"
                                    + "in a drawing for an all-expenses-paid vacation in the Bahamas: ");

                    firstName = input.next();
                    lastName = input.next();
                    phoneNumber = input.nextLong();

                    System.out
                            .printf("Thank you %s %s. We'll call you at %d if you're a winner.",
                                    firstName, lastName, +phoneNumber);
                }

            }

            mainMenuAttempt--;

        } while (mainMenuAttempt >0 && mainMenuAttempt < 3 && !wordOfTheDay.equals("tired") && answer!=24);
        System.exit(0);
    }
}

Essayez de casser toute la chose en très petites fonctions qui font une chose spécifique chacune.Par exemple, vous pourriez avoir une fonction qui vérifie simplement si un mot est le bon, renvoyant 0 s'il est ou le nombre de tentatives faites si ce n'est pas le cas.

private int checkWord(String correctWord, String wordToCheck, int attempts)
{
    if(wordToCheck.equals(correctWord))
    {
        return 0;
    }
    return attempts;
}

Vous pouvez alors faire une fonction qui prend la saisie de l'utilisateur et appelle cette fonction pour vérifier ladite entrée.Il pourrait alors produire un message d'erreur en fonction du code retour de la fonction précédente.La fonction renvoie alors un code pour indiquer la fonction au-dessus de la situation.

public int checkWordVerbose(String question, String correctWord, int attempts)
{
    if(attempts <= 3)
    {
        Scanner scan = new Scanner(System.in);
        System.out.print(question);
        String input = scan.nextLine();
        int failureCode = checkWord(correctWord, input, attempts);

        if(failureCode == 0)
        {
            return 0;
        } 
        else
        {
            System.out.println("Invalid! Attempts left: " + (3 - failureCode));
            return 1;
        }
    }
    else
    {
        System.out.println("Sorry! You have no more attempts left!\n");
        return 2;
    }
}

Enfin, vous pouvez créer une fonction qui contient simplement la boucle et contient la logique pour maintenir cette boucle:

public int checkWord(String correctWord)
{
    int failureCode = 1;
    int attempts = 1;
    do
    {
        failureCode = checkWordVerbose("Enter the word of the day: ", correctWord, attempts);
        attempts++;
    } while(failureCode == 1);
    return failureCode;
}

Puis dans la principale, tout ce que vous avez à faire est de vérifier si checkWord(String correctWord) est retourné 0. Répétez la même chose pour votre autre chèque (ou vous pourriez même pouvoir utiliser certaines des mêmes fonctions), effectuer une autre si elle est à l'intérieur du premier,Par exemple:

if(checkWord("tired") == 0)
{
    if(checkMath("24") == 0)
    {
        // Success!
    }
}

sauf si vous manquez quelque chose, vous attendez la première entrée et si c'est faux, vous allez dans une boucle DO-WHI et ne rechortez plus jamais si l'entrée est correcte.

Vous devez déplacer le si dans la boucle DO-While:

public static void main(String[] args) {

    Scanner input = new Scanner(System.in);

    int attempt = 2;
    int answer = 24;
    long phoneNumber = 0;
    String firstName = "";
    String lastName = "";
    String wordOfTheDay = "";

    System.out.printf("Enter the word of the day:  ");
    wordOfTheDay = input.nextLine();
    do {
        if (wordOfTheDay.equals("tired")) {

            for (attempt = 2; attempt >= 0; --attempt) {
                System.out.print(" 3 * 8 = ");
                answer = input.nextInt();
                input.nextLine();

                if (answer == 24) {
                    System.out
                            .printf("Please enter your first name, last name, and phone number (no dashes or spaces)\n"
                                    + "in a drawing for an all-expenses-paid vacation in the Bahamas: ");

                    firstName = input.next();
                    lastName = input.next();
                    phoneNumber = input.nextLong();

                    System.out
                            .printf("Thank you %s %s. We'll call you at %d if you're a winner.",
                                    firstName, lastName, +phoneNumber);
                }

                else if (answer != 24) {

                    if (attempt != 0) {

                        System.out
                                .printf("Invalid! Try Again! %d attempt(s) left!\n ",
                                        attempt);
                        continue;
                    } else {

                        System.out
                                .print("Sorry!  You have no more attempts left!");
                    }
                }

            }

        } else {

            System.out.printf("Invalid! Try Again! %d attempt(s) left!\n ",
                    attempt);
            System.out.printf("Enter the word of the day:  ");
            wordOfTheDay = input.nextLine();
            if (!wordOfTheDay.equals("tired")) --attempt;

        }

    } while (attempt >= 1);

    if (attempt == 0) {

        System.out.print("Sorry!  You have no more attempts left!");
    }

    System.exit(0);

}

Lorsque vous obtenez un résultat correct, vous devez sortir du circuit.cela se fait en utilisant le break déclaration:

if( answer == 24)
{
    System.out.printf( "Please enter your first name, last name, and phone number (no dashes or spaces)\n" +"in a drawing for an all-expenses-paid vacation in the Bahamas: " );
    firstName = input.next();
    lastName = input.next();
    phoneNumber = input.nextLong();
    System.out.printf( "Thank you %s %s. We'll call you at %d if you're a winner.", firstName, lastName,                                + phoneNumber);
    break;
    // that's the break statement
}

Ce code est incomplet, mais il a l'IDE dont vous aviez besoin.essayez ,.

Première Boolean= VRAI; boolean keeplooping= true;

do
    {
    if(!firstTry){
            System.out.printf( "Invalid! Try Again! %d attempt(s) left!\n ", attempt);
    }

        System.out.printf("Enter the word of the day:  ");
        wordOfTheDay = input.nextLine();
    if(wordOfTheDay.equals("hey!")){
        keepLooping = false;
    }
    --attempt;
    } while (attempt >= 1 && keepLooping);

Vous feriez mieux d'avoir une pause pour sauter hors de la boucle.autherbe La boucle continuera, imprimez le "3 * 8=" et attendez votre entrée. Si vous ne voulez pas utiliser une pause, rendez l'attaquant= -1 a également un sens.

if( answer == 24)
         {
            System.out.printf( "Please enter your first name, last name, and phone number (no dashes or spaces)\n"                              +"in a drawing for an all-expenses-paid vacation in the Bahamas: " );

        firstName = input.next();
        lastName = input.next();
        phoneNumber = input.nextLong();
        attempt = -1;
        System.out.printf( "Thank you %s %s. We'll call you at %d if you're a winner.", firstName, lastName,                                + phoneNumber);

         }

Eh bien, évidemment, vous devez casser la boucle extérieure.

Lorsque vous avez une réponse correcte (c.-à-d. «Réponse== 24 ') dans le bloc IF Définissez une variable booléenne« HAVENSWER »à« true »(qui est initialisée à« FAUX »et enregistrez la boucle extérieure avant le' System.Out.Print ("3 * 8="); 'Pour' Si (Haveenswer) {pause;} '

 enter code here`public static void main(String[] args)
 {

 Scanner input = new Scanner(System.in);

int attempt = 2;
int answer = 24;
long phoneNumber = 0;
String firstName = "";
String lastName = "";
String wordOfTheDay = "";


System.out.printf("Enter the word of the day:  ");
wordOfTheDay = input.nextLine();

if(wordOfTheDay.equals("tired"))
{
    boolean haveAnswer = false;
    for( attempt = 2; attempt >= 0; --attempt)
      {
        if (haveAnswer)
            break;
        System.out.print(" 3 * 8 = ");
        answer = input.nextInt();
        input.nextLine();

      if( answer == 24)
         {
            System.out.printf( "Please enter your first name, last name, and phone number (no dashes or spaces)\n"                              +"in a drawing for an all-expenses-paid vacation in the Bahamas: " );

        firstName = input.next();
        lastName = input.next();
        phoneNumber = input.nextLong();

        System.out.printf( "Thank you %s %s. We'll call you at %d if you're a winner.", firstName, lastName,                                + phoneNumber);

          haveAnswer = true;
          break;
         }

        else if( answer != 24)
        {

            if(attempt!=0)
            {

                System.out.printf( "Invalid! Try Again! %d attempt(s) left!\n ", attempt);
                    continue;
            }
            else
            {

                System.out.print( "Sorry!  You have no more attempts left!" );
            }
       }

     }

}
else
{
do
{

    System.out.printf( "Invalid! Try Again! %d attempt(s) left!\n ", attempt);
    --attempt;
    System.out.printf("Enter the word of the day:  ");
    wordOfTheDay = input.nextLine();
} while (attempt >= 1);


  if( attempt == 0)
  {

     System.out.print( "Sorry!  You have no more attempts left!" );
  }
}

System.exit(0);

}
}

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top