IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Reconnaître un message saisi


Sujet :

avec Java

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 6
    Points : 1
    Points
    1
    Par défaut Reconnaître un message saisi
    Bonjour à tous, ayant des problèmes dans la mise en place d'un projet, j'ai besoin d'aide... Il s'agit de créer une application permettant de créer des questionnaires pour les élèves (type partiel).
    J'ai donc rédiger une sous classe InfosContrôle permettant de répertorier les informations communiquées par les contrôles.
    Seulement, les contrôles peuvent être soient en Info11, Info12, Math11, Elect1, Info21, Info22, Math21 et Elec2.
    Et je suis bloqué, je ne sais pas comment faire mon constructeur, car je n'ai jamais vu comment faire quand il y avait des restrictions.

    Voici la consigne qui pourrait vous aider à comprendre ce que j'ai fais :

    Pour simplifer le développement de l’application, le nombre de questionnaires est limité à 32. Les matières sont : Info11, Info12, Math11, Elect1, Info21, Info22, Math21 et Elec2. Les épreuves possibles sont Contrôle Continu, Contrôle Terminal, Oral et Travaux Pratiques.

    Je vous vous joins ci dessous une copie du code que j'ai effectué dans ma classe InfosContrôle :

    Nom : projetpb.png
Affichages : 331
Taille : 232,8 Ko



    J'ai bien importé la classe permettant de lire scanner (import java.util.Scanner mais je ne sais pas comment faire fonctionner ce fichu constructeur. Et si par la même occasion, ce type de constructeur colle bien avec de la Programmation Objet ou non car il m'a l'air un poil trop algo sur les bords.
    Merci d'avance

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 635
    Points
    21 635
    Par défaut
    Hello,

    ceci n'est pas une copie de code, c'est une capture d'écran. Pour nous fournir une copie de code, il faut passer ta souris sur ton code pour le faire devenir bleu, puis appuyer sur les touches Control et C. Ensuite, venir sur le forum, commencer à taper ton message et appuyer sur Control et V. Merci.


    Pour information, en Java, on ne vérifie pas l'égalité d'objets avec == ou != . Ça c'est une égalité de pointeurs, pour vérifier si deux variables pointent ou non vers le même objet.
    Pour vérifier si deux objets différents sont égaux, on utilise equals(). Exemple : if(salutation.equals("bonjour")) .


    À part ça, je ne saurais pas trop dire si "trop algorithmique" est une bonne manière de le dire, mais je confirme, on doit vraiment éviter de faire ça dans un constructeur.
    Pour commencer, quand un paramètre n'est pas bon, il ne faut pas essayer de l'obtenir à nouveau pour qu'il devienne bon. Il faut juste refuser de construire l'objet, ou alors accepter le paramètre quel qu'il soit. Soit dit en passant, c'est pareil pour tous les paramètres, que ce soit de constructeur ou de méthode. Parce que là, tu dupliques le code d'obtention du paramètre (et j'imagine d'ailleurs que tu as créé plus d'un Scanner sur System.in. Il ne faut pas.)
    Un constructeur devrait vraiment se limiter à stocker l'état initial de l'objet en fonction des paramètres, éventuellement en les vérifiant d'abord, mais sans appliquer de logique métier, seulement de la validation et de la transformation si nécessaire.

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Pour te donner une idée de comment gérer les matières, la saisie et les erreurs de saisie, ta liste de matière est fixe, n'est-ce-pas ? Utilises une structure statique finale. Si tu n'as pas de paramétrage, le mieux est encore d'utiliser une enum. Il y a également la solution du Set.

    Avec l'énumération, la liste de matière est en dur dans le code et immuable. Pas de risque d'erreur. Pas de test à faire dans le constructeur (pas de test à rallonge avec 36 valeurs en plus), à part éventuellement un test de nullité.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public enum Matiere {
     
         Info11, Info12, Math11, Elect1, Info21, Info22, Math21, Elec2; // ici la convention habituelle est de mettre tout en majuscule, mais pour simplifier je mets les libellés exacts que tu veux 
     
    }
    Pour le constructeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public InfoControle(Matiere matiere, ... ) {
        Objects.requireNonNull(matiere); // s'assure que tu ne passes pas null comme matière (cause une NullPointerException sinon)
        ... traitement ...
    }
    Pas de if à rallonge comme ça... c'est nettement plus clair et simple, non ?

    Et pour la lecture au clavier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    public class Saisies {
     
    	private static final Scanner scanner = new Scanner(System.in); // un seul scanner pour toute l'application
     
    	public static Matiere lireMatiere() {
     
    		System.out.println("Saisir la matière (ou entrée pour annuler la saisie de la matière) :");
     
    		int nb=0;
    		while( scanner.hasNextLine() ) { 
     
    			String matiere = scanner.nextLine();
     
    			if ( "".equals(matiere) ) { // on peut utiliser ce test par exemple, pour permettre d'abandonner la saisie
    				break;
    			}
    			try {
    			   return Matiere.valueOf(matiere); // on convertit la chaine en Matiere (la matière doit être saisie exactement comme mis dans l'enim (on pourra voir après si tu veux comment faire pour ne pas avoir à respecter la casse si tu veux)
    			}
    			catch(IllegalArgumentException e) {
    				nb++; // on compte le nombre de fois qu'on se trompe
    				System.out.println("Matière inconnue : " + matiere);
    				if ( nb>2 ) {
    					// si on se trompe plus de 2 Fois
    					System.out.println("Rappel - les matières possibles sont :");
    					for(Matiere matierePossible : Matiere.values()) {
    						System.out.println("- "+matierePossible);
    					}
    				}
    			}
    		}
     
    		return null; // fin de programme
     
    	}
    Tu vois qu'avec une enum, on a des possiblités de gestion sympa comme le fait d'afficher la liste des matières par exemple.

    La lecture devenant tout simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Matiere matiere = Saisie.lireMatiere();
     
           ...
     
           if ( matiere!=null && epreuve... ) {
                  InfoControl infoControl = new InfoControl( matiere, ... );
     
                  ...
           }

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    D'accord, merci à vous

Discussions similaires

  1. Shootbox : découpage du message saisi
    Par JmL40 dans le forum Langage
    Réponses: 1
    Dernier message: 29/05/2007, 12h13
  2. message d'alerte en "live" à la saisie dans un formulaire
    Par arnogef dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 12/02/2007, 00h53
  3. Message d'avertissement avant saisie
    Par gentoo dans le forum Access
    Réponses: 3
    Dernier message: 09/02/2007, 21h50
  4. Je n'ai plus acces au petit bouton dans la saisie des messages
    Par Louis Griffont dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 6
    Dernier message: 17/01/2007, 09h03
  5. Réponses: 12
    Dernier message: 22/11/2006, 21h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo