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 :

Exercices (niveau débutante)


Sujet :

avec Java

  1. #21
    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 : 54
    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
    Citation Envoyé par Ennydra Voir le message
    Quelle est la différence entre System.out.print("...") et PrintString("..."). Y en a-t-il une ou ça a strictement le même "sens" du point de vue de la machine ?
    System est une classe standard du JDK, out une variable statique de cette classe, qui représente une flux de caractères, qui, par défaut, se déverse dans la console (on peut très bien le rediriger vers un fichier, ou vers une liaison réseau, ou n'importe. print() est une méthode de la classe qui type out (java.io.PrintStream) qui permet d'envoyer (d'écrire) vers ce flux quelquechose (il existe plusieurs "versions" de print() avec des paramètres différents : print(String x) permet d'écrire une String, print(int i) permet d'écrire un entier, etc.

    Pour faire plus simple, System.out.print("...") est le code qui permet d'écrire "..." dans la console, si on a pas changer la configuration standard d'éxécution.

    PrintString, par contre, n'est pas standard en Java (d'ailleurs, cette écriture ne respecte pas les conventions Java de nom de méthode : on devrait avoir printString()). Il s'agit d'une méthode qui probablement est définie comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public static void PrintString(String string) {
        System.out.println(string);
    }
    Mais ce n'est que de la supputation : sans avoir le code, ou sans avoir une documentation qui m'explique ce qu'elle fait, je ne peux que le deviner, en estimant que le nom a un rapport avec ce qu'elle fait. Et encore, je suis obligé de me poser plein de questions : ne serait-ce que "Est-ce que ça passe à la ligne à la fin ou pas ?", car cette méthode pourrait être définie comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public static void PrintString(String string) {
        System.out.print(string);
    }
    Du point de vue du résultat, il n'y a pas de différence entre ces 2 programmes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class Demo1 {
    public static void main(String[] args) {
       PrintSring("coucou");
    }
    public static void PrintString(String string) {
        System.out.println(string);
    }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class Demo2 {
    public static void main(String[] args) {
        System.out.println("coucou");
    }
    }
    On a simplement une méthode qui fait quelque chose et qu'on appelle pour qu'elle fasse ce quelque chose : ici, elle ne fait rien d'autre que ce que fait très bien System.out.print. Il n'y a priori pas de raison pour créer une telle méthode, si ce n'est justement le problème du passage à la ligne. Peut-être que le but ici est d'éviter qu'on puisse se tromper et utiliser out.print() au lieu de out.println(), ou peut-être est ce simplement parce que tu n'as pas encore vu ces objets et méthodes en cours, et que ton prof a voulu simplifier l'exercice en donnant une méthode qui écrit à l'écran en demandant de l'appeler sans se poser plus de question, en attendant d'aborder ça plus complètement en cours.

    Ensuite, il peut y avoir des raisons particulières pour utiliser une telle méthode plutôt que directement System.out.println() (ou print()) : par exemple, on peut afficher systématiquement la date et l'heure, au début de la ligne. Du coup, ce serait fastidieux d'avoir à le faire à chaque fois qu'on veut écrire quelque chose dans la console : le fait d'avoir une méthode qui le fait systématiquement, évite d'avoir à le répéter (et de risquer de l'oublier de temps en temps). Le but de la méthode peut également aussi être de masquer ce qu'elle fait, pour justement le changer facilement : par exemple, si ton prof modifie quelque chose (un paramètre par exemple, ou une bibliothèque) pour que ce que tu passes en paramètre passe directement dans un programme qui analyse ça et le compare à un résultat prévu, il peut corriger rapidement les exercices sans avoir à lire les résultats, un par un, dans la console pour les comparer à un résultat voulu (s'il a 30 élèves qui font 10 exercices chacun, j'espère pour lui qu'il fait bien comme ça).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  2. #22
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    Super ! Merci beaucoup pour cette réponse très détaillée qui m'aura vachement éclaircie !

    Et du coup la différence entre println et print, c'est simplement ce retour à la ligne. J'allais poser la question, ben du coup tu y as répondu

    J'aurais une longueur d'avance sur mes camarades !

    Très bonne soirée (ou nuit) !

  3. #23
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    Rebonjour à tous !

    Je bloque à nouveau sur un exo. Je les ai quasiment tous terminés mais celui-ci me bloque. Encore avec des astérisques !

    1. Ecrire une fonction qui prend en entrée un entier positif n et affiche un carré plein de côté n. Par exemple, si n vaut 4, votre fonction affichera :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ****
    ****
    ****
    ****
    2. Modifier votre fonction pour qu'elle affiche un carré creux, par exemple pour n valant 4,

    3. Ecrire une fonction qui prend en entrée un entier n et affiche, pour i allant de 1 à n, i étoiles sur la i-ème ligne. Par exemple, pour n=5, afficher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    * 
    * * 
    * * *
    * * * *
    * * * * *
    Puis pour celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        *
       * *
      * * *
     * * * *
    * * * * *
    Pour la 1, j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    static void entierCarrePlein (int n) {
      for (int i=1; i<=n; i++) {
         for (int j=1; i<=n; i++) {
            PrintString("*");
         }
       newLine();
       }
    }
    Pour la 3a j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public static void triangleAsterisques (int n) {
         for (int i=0; i<n; i++) {
            for (int j=0; j<=i; j++) {
                printString("* ");
            }
         newLine();
         }
    }
    Et la 3b :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public static void pyramideAsterisques (int n) {
         for (int i=0; i<n; i++) {
            for (int j=0; j<=i; j++) {
                printString(" * ");
            }
         newLine();
         }
    }
    Mais pour la 2 (le carré vide) je n'y arrive pas. Je remarque que lorsque i=1 il y a n étoiles (pour tout j), et lorsque i=n, il y a n étoiles (pour tout j). Pareil, lorsque j=1 ou j=n, il y a toujours une étoile... Mais comment coder cela ? Evidemment je dois partir de mon code 1/ et ajouter une condition mais je ne vois pas comment faire... Avez-vous une solution / piste à me proposer ?

  4. #24
    Membre averti
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juillet 2013
    Messages
    269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 269
    Points : 434
    Points
    434
    Par défaut
    Citation Envoyé par Ennydra Voir le message
    Rebonjour à tous !

    Mais pour la 2 (le carré vide) je n'y arrive pas. Je remarque que lorsque i=1 il y a n étoiles (pour tout j), et lorsque i=n, il y a n étoiles (pour tout j). Pareil, lorsque j=1 ou j=n, il y a toujours une étoile... Mais comment coder cela ? Evidemment je dois partir de mon code 1/ et ajouter une condition mais je ne vois pas comment faire... Avez-vous une solution / piste à me proposer ?
    Bonjour,

    pour la condition de la 2 je dirai comme ça à vue de nez, que lorsque i ou j est différent de 1 ou n, alors il faut mettre un blanc plutôt qu'une étoile (et faire attention aux parenthèses dans la condition if).

  5. #25
    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 : 54
    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
    Pour la question 1, ta solution fonctionne. Mais comme précédemment tu avais écrit une méthode qui affiche n * en passant à la ligne, tu aurais pu appeler cette méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    static void entierCarrePlein (int n) {
      for (int i=1; i<=n; i++) { 
            ligneAsterisques (n);
       }
    }
    Pour la question 2, essayes de réfléchir à la problématique en combinant les exercices précédents :

    • Pour afficher la première et la dernière ligne, c'est la même chose que pour le carré plein, donc c'est la même chose que d'afficher une ligne d'astérisques ;
    • Pour les 2 lignes du milieux, c'est afficher une *, puis des espaces, puis une *. Tu peux résoudre ça en utilisant la même condition que tu as utilisée pour le test d'appartenance à un intervalle; Si j appartient à l'intervalle (bornes exclues), on affiche espace, sinon on affiche * (et on revient à la même structure que pour l'avant-dernier exercice ou il fallait afficher "* * * * "
      Tu peux également afficher une *, n-2 espaces, puis une *.


    Pour la 3), le triangle rectangle, pareil, tu peux réutiliser justement l'avant-dernière méthode, celle qui permet d'afficher une alternance de * et d'espace, et de l'appeller en passant en paramètre, non plus n, mais i (l'index de boucle).

    Pour la 4), réfléchis au nombre d'espaces qu'il faudrait ajouter devant chaque ligne pour la décaler suffisamment...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #26
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    Merci pour les tuyaux pour la 2. Je pense que j'ai réussi à coder tout ça !



    Par contre la 4 je ne vois pas du tout...

    Je remarque qu'il y a n espaces avant * lorsque i=1, n-1 espaces lorsque i=2, puis 0 espace lorsque i=n...

  7. #27
    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 : 54
    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
    Reprenons :

    * 
    * * 
    * * *
    * * * *
    * * * * *
    Puis pour celle-ci :
        *
       * *
      * * *
     * * * *
    * * * * *
    On voit qu'il y a le même nombre de * sur les mêmes lignes des 2 formes, n'est-ce-pas ? 1 sur la première, 2 sur la deuxième, etc... Donc, on peut déjà déduire que les lignes sont les mêmes, mais qu'elles sont décalées. Il suffit maintenant de déterminer ce décalage.

    Partons du bas : la dernière ligne est exactement la même. Le décalage est de 0.

    Pour la deuxième ligne, en partant du bas, on a une espace de décalage. Puis pour la troisième en partant du bas, on a 2 espaces de décalage. Donc, pour la nème ligne en partant du bas on a n-1 espaces de décalage. C'est-à-dire n-1 espaces à afficher avant la série d'étoiles et d'espaces qu'on affiche dans le cas de la première forme.

    Maintenant, pour une forme à n ligne, la dernière étant à 0, la n-1ème, à 1, la n-2ème, à 2, on peut en déduire que la n-xème est à x espaces devant, etc... x variant de 0 à n-1, x vallant donc n-i (i étant ton indice de boucle : i=n, x=0 ; i=n-1, x=1...). Tu as un moyen de calculer le nombre d'espaces par rapport à i et n, (i qui varie sur cet intervalle dans ta boucle : 1<= i <= n).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. [Tableaux] Exercice de débutant
    Par kazane dans le forum Langage
    Réponses: 10
    Dernier message: 15/09/2006, 02h19
  2. [Conseil] Livre Algo-maths niveau débutant
    Par spilliaert dans le forum Débuter
    Réponses: 11
    Dernier message: 21/04/2006, 19h57
  3. [MFC] Lire une string (niveau débutant)
    Par Korskarn dans le forum MFC
    Réponses: 10
    Dernier message: 24/08/2005, 18h38

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