CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

J'arrive pas à saisir les "pointeurs" en Java

Skywaaalker
Skywaaalker
Niveau 10
12 décembre 2017 à 12:12:59

Bonjour,

Je débute et en cours on est arrivé aux pointeurs. Le soucis c'est qu'on programme en java et qu'apparemment ils n'existent pas en tant que tel

Voici un code que j'ai recopié bêtement sur mon voisin https://image.noelshack.com/fichiers/2016/24/1466366197-risitas10.png

Quelqu'un pour me réexpliquer vite fait svp ? https://image.noelshack.com/fichiers/2016/30/1469541959-risitas206.png


package listes;

import edu.princeton.cs.introcs.StdOut;

public class theorie_liste {

    public static void main(String[] args) {
       

        DataPtr maillon1 = new DataPtr();
        DataPtr tete = null;

        maillon1.Data=27;

        DataPtr maillon2 = new DataPtr(); 

        maillon2.Data=15;
        maillon1.ptr=maillon2;


        tete=maillon1;
        maillon1.ptr.Data=15;            // maillon1.ptr c'est maillon2  //  maillon.ptr.data c'est qu'on demande les données du maillon suivant


        DataPtr maillon3 = new DataPtr();

        maillon3.Data=22;
        maillon2.ptr=maillon3;

        DataPtr maillon4 = new DataPtr();

        maillon4.Data=54;
        maillon3.ptr=maillon4;
        maillon4.ptr=null;                 //pointe vers null


        AfficheTete(tete);

    }



    public static void AfficheTete(DataPtr tete) {         ///AFFICHER LA TETE///
        while (tete!=null) {

            StdOut.println(tete.Data);
            tete=tete.ptr;
        }
    }


}

sentrance
sentrance
Niveau 10
12 décembre 2017 à 18:45:44

J'ai l'impression que ce qu'ils appellent pointeur est simplement une variable d'objet.

Parceque là ton code ce qu'il fait c'est :

Créer un objet, lui assigner un nombre. Créer un second objet, lui assigner un nombre et le stocker dans le 1er objet. Créer un troisième objet, lui assigner un nombre et le stocker dans le 2ème objet. Etc...
Puis la méthode "afficherTete" va afficher le nombre de l'objet, puis "change d'objet" en récupérant l'objet stocker dans celui qu'il vient de lire.
Comme ils sont tous reliés entre eux (le premier stock le 2nd etc), c'est comme une chaîne et c'est simple à parcourir.

arsh222
arsh222
Niveau 10
12 décembre 2017 à 20:09:10

On ne parle pas vraiment de "pointeurs" en Java.
Il y a des types simples (nombre, caractère, booléen), où la variable contient une valeur directement (3,"a",true par exemple) et des types objet (tous les autres), où la variable contient une référence vers un objet.
Par exemple, avec un type primitif, si tu fais quelque chose comme

int a = 5;
int b = a;

Tu copies la valeur de a (qui est 5) vers b, donc a et b sont deux variables indépendantes qui valent toutes les deux 5.
Mais avec un type objet, quand tu fais

a = new DataPtr();
b = a; 

new DataPtr() crée un objet de type DataPtr et sa référence est enregistrée dans a. Ensuite, b = a; copie cette référence dans b, et donc a et b contiennent donc tous les deux une référence vers le même objet.

Donc techniquement toute variable de type objet est une sorte de "pointeur" vers un objet.

En ce qui concerne ton code, il construit une liste chaînée, où chaque maillon est un objet de type DataPtr, qui contient une valeur propre (le membre Data) et une référence vers le maillon suivant, le membre ptr.

Quand le code fait
DataPtr maillon2 = new DataPtr(); maillon1.ptr=maillon2;

Il crée un nouveau maillon et met sa référence dans le membre ptr de maillon1.
Quand il fait
DataPtr maillon3 = new DataPtr(); maillon2.ptr=maillon3;

Il ajoute un troisième maillon et met sa référence dans maillon2. On se retrouve donc avec une suite de maillons (objets DataPtr) où chaque maillon contient une référence vers le maillon suivant, ce qui constitue une sorte de chaîne qu'on peut parcourir en remontant de maillon en maillon grâce aux références.

La "tête" de la chaîne est le dernier maillon, on la trouve en remontant la chaîne jusqu'à trouver un maillon qui n'a pas de maillon suivant, donc où son membre ptr est null.

godrik
godrik
Niveau 30
12 décembre 2017 à 20:12:15

Le code, c'est le code d'une liste chainee avec des maillons, pas d'un pointeur vraiment.

Skywaaalker
Skywaaalker
Niveau 10
13 décembre 2017 à 16:44:06

Merci arsh22 c'est hyper bien expliqué.

Donc en gros en Java comme tu l'as dis, tout est pointeurs ?

JeanCroutenard
JeanCroutenard
Niveau 10
13 décembre 2017 à 18:56:13

Le 13 décembre 2017 à 16:44:06 Skywaaalker a écrit :
Merci arsh22 c'est hyper bien expliqué.

Donc en gros en Java comme tu l'as dis, tout est pointeurs ?

Tous les objets sont des pointeurs.
Les types de base (int, char, boolean, float, double, ...) n'en sont pas, ils sont stockés directement dans ta variable.

Pour les reconnaître, les types objets commencent par une majuscule (String, Integer, DataPtr) et les types de base par une minuscule.

Message édité le 13 décembre 2017 à 18:56:25 par JeanCroutenard
Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment