2017-10-04 3 views
0

Pour ma classe de programmation, j'ai l'affectation suivante:Imprimer une chaîne, accepter l'entrée utilisateur et la valider en utilisant une méthode String privée?

Dans cette mission, vous écrirez un programme qui modèle un magasin pour animaux de compagnie . Le programme aura une classe Pet pour modéliser des animaux de compagnie individuels et la classe Assignment5 contiendra la main et agira comme animalerie. Les utilisateurs seront en mesure d'afficher les animaux de compagnie, les faire vieillir une année à la fois, ajouter un nouvel animal de compagnie, et adopter l'un des animaux de compagnie.

J'ai fini de faire la classe Pet, mais je rencontre des difficultés avec cette étape spécifique de la mission:

Créer une méthode de private static String qui affiche le menu principal du programme. Il accepte ensuite une chaîne de l'utilisateur et retourne son choix. Les commandes à lister sont les suivantes. une. Liste des animaux de compagnie dans le magasin . b. Âge les animaux de compagnie. c. Ajouter un nouvel animal de compagnie. ré. Adopter un animal de compagnie. e. Quitter. je. Votre méthode doit vérifier que l'utilisateur a entré une entrée valide avant de renvoyer l'entrée.

private static String mainMenu(){ 
    return "\n" + "A. List the pets in the store." + 
        "\n" + "B. Age up the pets" + 
        "\n" + "C. Add a new pet" + 
        "\n" + "D. Adopt a pet" + 
        "\n" + "E. Quit"; 
} 

Le problème est que je ne peux pas trouver un moyen de la méthode d'imprimer le menu et accepter et valider les entrées utilisateur. Pouvez-vous m'aider à intégrer le code ci-dessous dans ma méthode privée?

// Ask for letter 
    System.out.println("Type the letter to make your selection." + mainMenu()); 
    char letter = Character.toUpperCase((scan.next().charAt(0))); 

    // Check if letter is valid. If not, ask the user to input another letter. 
    while (!(letter >= 'A' && letter <= 'E')){ 
     System.out.println("That is not one of the options. Input another letter."); 
     letter = Character.toUpperCase((scan.next().charAt(0))); 
    } 
+1

* Etape 1: * Faire la méthode en fait 'print()' le menu, au lieu de retourner une chaîne avec le menu. --- * Étape 2: * Ayez votre code après l'impression du menu. --- * Etape 3: * 'return' la valeur saisie par l'utilisateur. – Andreas

Répondre

3

Je ne sais pas où votre scanner est déclaré en ce moment, mais vous voulez quelque chose comme le

private static String mainMenu(Scanner scan){ 
    String menu = "\n" + "A. List the pets in the store." + 
      "\n" + "B. Age up the pets" + 
      "\n" + "C. Add a new pet" + 
      "\n" + "D. Adopt a pet" + 
      "\n" + "E. Quit"; 

    System.out.println("Type the letter to make your selection." + menu); 
    char letter = Character.toUpperCase((scan.next().charAt(0))); 

    // Check if letter is valid. If not, ask the user to input another letter. 
    while (!(letter >= 'A' && letter <= 'E')){ 
     System.out.println("That is not one of the options. Input another letter."); 
     letter = Character.toUpperCase((scan.next().charAt(0))); 
    } 

    return letter + ""; 
} 

suivant J'utilise return letter + ""; parce que la lettre est un char, et votre fonction renvoie une chaîne donc un moyen facile de le convertir est de concaténer la citation vide

Il semble que vous ayez déjà un scanner déclaré, dans ce cas vous pouvez le passer en paramètre comme je l'ai, ou vous pouvez avoir une variable d'instance pour le scanner, finalement Le point est que vous avez structuré le reste de votre classe

0

Le point est que dans votre implémentation vous retournez le menu à la toute première ligne, donc la méthode ne peut pas avoir de comportement supplémentaire, j'ai créé une classe pour cet exemple en utilisant la plupart de votre code, espérons que vous pouvez l'utiliser, j'ai aussi déplacé le contrôle d'entrée valide à une méthode distincte comme une sorte de bonne pratique :)

package stackOverflow; 

import java.util.Scanner; 

public class Pregunta { 

    public static void main(String[] args) { 
     String choice = menu(); 
     System.out.println("User input: " + choice); 
    } 

    public static String menu() { 
     String menu = "\n" + "A. List the pets in the store." + 
       "\n" + "B. Age up the pets" + 
       "\n" + "C. Add a new pet" + 
       "\n" + "D. Adopt a pet" + 
       "\n" + "E. Quit"; 
     System.out.println(menu); 
     Scanner scan = new Scanner(System.in); 
     String input = scan.next(); 
     char letter = Character.toUpperCase((input.charAt(0))); 

     // Check if letter is valid. If not, ask the user to input another letter. 
     while (!isValidInput(letter)) { 
      System.out.println("That is not one of the options. Input another letter."); 
      input = scan.next(); 
      letter = Character.toUpperCase(input.charAt(0)); 
     } 
     return input; 
    } 

    public static boolean isValidInput(char letter) { 
     return (letter >= 'A' && letter <= 'E'); 
    } 
}