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 :

Fonctionnement d'un programme, le mecanisme d'éxecution et affichage en Java


Sujet :

avec Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2008
    Messages : 69
    Points : 52
    Points
    52
    Par défaut Fonctionnement d'un programme, le mecanisme d'éxecution et affichage en Java
    Bonjour à tous;

    Je cherche à comprendre le mecanisme de fonctionnement de ces 2 programmes java, entre les fonctions et leurs appels,
    Voici le premier programme affiche H;H;H, je cherche une explication pourquoi il n'affiche pas HELLO

    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
    public class HelloWorld{
        public static void main(String[] args){
    String maString ="H";
    afficheMaString (maString);
    changeMaString (maString);
    afficheMaString (maString);
    String uneString = 
    ajouteEOuL(changeMaString(changeMaString(maString)));
    afficheMaString (uneString);
    }
    public static void afficheMaString(String maString){
    System.out.print(maString + ";");
    }
    public static String changeMaString(String  maString){
            String uneString = ajouteEOuL (maString) + "0" ;
           return maString;
    }
     public static String ajouteEOuL(String maString){
            if(maString.length() == 1){
                maString += "E";
            }else if(maString.length() == 2){
                maString += "L";
           }else{
                maString = "HELLO";
            }
            return maString;
       }
    }
    Le deuxième affiche des i=0, i=0 et i=0, je pensais qu'il doit afficher i=0, i=20 et i=30 j'aimerais avoir des explications sur le fonctionnement du programme.

    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
    36
    37
    38
    39
    public static void 
    monSousProgramme(){
    int i = 0;
    afficheI(i);
    changeI(i);
    afficheI(i);
    i = changeEtRetourne
    (
    changeEtRetourne(changeEtRetourne(i))
    );
    afficheI(i);
    }
    public static void afficheI(int i){
    System.out.print(" i = " + i + " ;");
    }
    pu
    blic static int changeEtRetourne
    (int i){
    int y = ajouteDixOuVingt(i) + 20
    ;
    return i;
    }
    public static void changeI(int i){
    i = 
    ajouteDixO
    uVingt(i) + 20
    ;
    }
    public 
    static 
    int ajouteDixOuVingt(int i){
    if(i  == 10){
    i = i + 20;  
    }else{
    i = i + 10;
    }
    return i;
    }
    }

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    Avec quelques petit commentaire pour le premier exemple :

    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
    36
    37
    38
    public class HelloWorld
    {
    	public static void main(String[] args)
    	{
    		String maString = "H";
    		afficheMaString(maString); // Affiche le string H
    		changeMaString(maString); // Ne fait rien dutout (voir changemastring)
    		afficheMaString(maString); // Affiche le meme string que 2 lignes avant forcement
    		String uneString = ajouteEOuL(changeMaString(changeMaString(maString))); // ma String valant toujours H sa valeur initiale on obtient HE 
    		afficheMaString(uneString); // Affiche HE
    	}
     
    	public static void afficheMaString(String maString)
    	{
    		System.out.print(maString + ";");
    	}
     
    	public static String changeMaString(String maString)
    	{
    		String uneString = ajouteEOuL(maString) + "0"; // Ne fait rien dutout puisque la variable retournée ne va pas etre utilisé par après
    		return maString;
    	}
     
    	public static String ajouteEOuL(String maString)
    	{
    		if (maString.length() == 1)
    		{
    			maString += "E";
    		} else if (maString.length() == 2)
    		{
    			maString += "L";
    		} else
    		{
    			maString = "HELLO";
    		}
    		return maString;
    	}
    }
    Pour le 2 eme, ce que tu crois qu'il est censé faire ne peut pas se faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public static void changeI(int i)
    	{
    		i = ajouteDixOuVingt(i) + 20;
    	}
    le i = quelque chose, ne va pas modifié le i passé a la fonction. Les types primitif sont passé par copie et pas par référence, donc ton i que crois qui va être modifié ne le sera pas.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé Avatar de freddou17
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 341
    Points : 566
    Points
    566
    Par défaut
    Slt,
    Voici qlqs explications pour ton premier progr

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public static void main(String[] args){
    		String maString ="H";
    		afficheMaString (maString);//jusque là ça va : résultat => H; maString vaut toujours H
    		changeMaString (maString);//résultat => HE0 mais maString vaut tjs H. Tu ne pas pas récupérer HE car tu ne stockes pas le retour de ta mth
    		afficheMaString (maString);//toujours résultat H; car maString vaut toujours H.  tu ne stockes pas le retour de ta mth
    		String uneString = ajouteEOuL(changeMaString(changeMaString(maString)));
    		//appel 1: changeMaString(maString) uneString = > résultat HE0, maString vaut toujours H. Attention tu retournes maString et non uneString
    		//appel 2: changeMaString(maString) uneString = > résultat HE0, maString vaut toujours H. Attention tu retournes maString et non uneString
    		//appel 3: ajouteEOuL uneString vaut HE car maString vaut H => ça revient à faire ajouteEOuL("H");
    		afficheMaString (uneString);//résultat sysout => HE;
    	}
    Pour ton deuxième progr wax78 t'a donné les explications; Par contre un conseil évite les mth du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public static int changeEtRetourne(int i) {
    		int y = ajouteDixOuVingt(i) + 20; // pourquoi créer y, pour ne rien en faire
    		return i; //pourquoi mettre un return plutôt qu'un void => soit tu stockes le retour de ta mth soit tu créé une void
    	}
    ++
    "Aucun de nous ne sait ce que nous savons tous, ensemble."
    Lien vers mon appli Funcash n'hésitez pas à donner votre avis

  4. #4
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    bonjour,
    Citation Envoyé par wax78 Voir le message
    Les types primitif sont passé par copie et pas par référence, donc ton i que crois qui va être modifié ne le sera pas.
    @wax78 je suis entièrement d'accord avec toi, mais pour évité toute confusion j'ajouterais que la référence d'une instance est aussi passé par copie, et que la création d'une nouvelle instance dans une méthode ne modifira pas l'instance passé en paramètre !
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/05/2009, 00h22
  2. fonctionnement d'un programme
    Par cdoctora dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 02/02/2009, 03h37
  3. Réponses: 11
    Dernier message: 18/12/2007, 11h12
  4. [patterns] conseil sur le fonctionnement de mon programme
    Par lichman dans le forum Design Patterns
    Réponses: 4
    Dernier message: 13/09/2007, 09h32
  5. fonctionnement d'un programme en c++
    Par sandball22 dans le forum C++
    Réponses: 13
    Dernier message: 13/04/2007, 18h07

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