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

Langage Java Discussion :

convertir un générique en Int ?


Sujet :

Langage Java

  1. #1
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut convertir un générique en Int ?
    Bonjour j'ai dans mon code une méthode générique d'un arbre binaire, et je souhaiterais afficher sa valeur;
    voici la méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public BinTree<T> sag(){
    		return left;
    	}
    en console j'ai l'adresse mémoire qui s'affiche : Noeud@2a9931f5

    et je souhaiterais pouvoir afficher la valeur quelle contient, comment faire j'ai essayer de caster en Integer mais ca ne fonctionne pas !

    voila le code de ma page :
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    public class Noeud<T> implements BinTree<T> {
     
    	private T root;
    	private BinTree<T> left;
    	private BinTree<T> right;
     
    	public Noeud(T r, BinTree<T> g, BinTree<T> d){
    		root = r;
    		left = g;
    		right = d;
    	}
     
     
    	public boolean estVide(){
    		return false;
    	}
     
    	public T racine(){
    		return root;
    	}
     
    	public BinTree<T> sag(){
    		return left;
    	}
     
    	public BinTree<T> sad(){
    		return right;
    	}
     
    	public int hauteur(){
    		int g = left.hauteur();
    		int d = right.hauteur();
    		int res = (g>d ? g:d);
    		return res+1;
    	}
     
    	public int taille(){
    		return 1+left.taille()+right.taille();
    	}
     
    	public String affichage(){
    		return "["+root+","+left.affichage()+","+right.affichage()+"]";
    	}
     
    	public void imprime(){
    		for (int i=0; i<1; i++){
    			System.out.println("   "+root);
    		}
    		for (int j=1; j<2; j++){
    			System.out.println(" /   \\ ");
    		}
    		for (int j=2; j<3; j++){
    			System.out.println();
    		}
    	}
    }

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 078
    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 078
    Points : 7 986
    Points
    7 986
    Par défaut
    Il faut redefinir la methode toString(); dans la classe de l'objet T je pense pour avoir un affichage perso.

    Ensuite pour le 2 eme probleme : Il est ou ton cast qui ne marche 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 actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut
    ah ben je l'ai enlevé le cast, tu veux dire quoi par redéfinir la méthode toString() ?

    j'ai enlevé le cast qui ne fonctionner pas ! par contre j'ai fait ceci, j'ai rajouté l'attribut left1 qui cast en int left, mais quand je l'affiche en console j'obtient "null" !
    alors que dans mon main que voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	public static void main(String[] args) {
    		BinTree<Integer> a0 = new Feuille<Integer>();
    		BinTree<Integer> a2 = new Noeud<Integer>(2,a0,a0);
    		BinTree<Integer> a4 = new Noeud<Integer>(4,a0,a0);
    		BinTree<Integer> a7 = new Noeud<Integer>(7,a0,a0);
    		BinTree<Integer> a01 = new Noeud<Integer>(0,a2,a7);
    		BinTree<Integer> a1 = new Noeud<Integer>(1,a01,a4);
    je ne comprend pas pourquoi j'ai null car j'ai bien instancier une valeur à chaque noeud et a leur fils gauche et droit

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 078
    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 078
    Points : 7 986
    Points
    7 986
    Par défaut
    Ton truc est si gros que ca que tu ne postes pas un truc(code) essayable ? Parce que la c'est pas évident.
    (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

  5. #5
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut
    Il est assez gros mais je l'ai réduit pour afficher le problème, voila
    la j'ai mon interface :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public interface BinTree<T> {
     
    	boolean estVide();
    	T racine();
    	BinTree<T> sag();
    	BinTree<T> sad();
    	int hauteur();
    	int taille();
    	String affichage();
    	void imprime();
    }
    ensuite ma classe Feuille qui permet d’instancier les feuilles de l'arbre B (peu d'importance car elle ne pose pas de soucis) :

    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
     
    public class Feuille<T> implements BinTree<T> {
     
    	public boolean estVide(){
    		return true;
    	}
     
    	public T racine(){
    		throw new IllegalArgumentException("C'est une feuille");
    	}
     
    	public BinTree<T> sag(){
    		throw new IllegalArgumentException("C'est une feuille");
    	}
     
    	public BinTree<T> sad(){
    		throw new IllegalArgumentException("C'est une feuille");
    	}
     
    	public int hauteur(){
    		return 0;
    	}
     
    	public int taille(){
    		return 0;
    	}
     
    	public String affichage(){
    		return "<>";
    	}
     
    	public void imprime(){
     
    	}
    et ensuite ma classe Nœud qui instancie les nœuds de mon arbre, et c'est que ce pose le problème, je n'arrive pas à afficher la valeur des fils gauche et droit aussi bien en fesant un cast de sag() qui me retourne un null, ou en essaye de l'obtenir avec une méthode string qui ne fonctionne pas :
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    public class Noeud<T> implements BinTree<T> {
     
    	private T root;
    	private BinTree<T> left;
    	private BinTree<T> right;
     
    	public Noeud(T r, BinTree<T> g, BinTree<T> d){
    		root = r;
    		left = g;
    		right = d;
    	}
     
     
    	public boolean estVide(){
    		return false;
    	}
     
    	public T racine(){
    		return root;
    	}
     
    	public BinTree<T> sag(){
    		return left;
    	}
     
    	public BinTree<T> sad(){
    		return right;
    	}
     
    	public int hauteur(){
    		int g = left.hauteur();
    		int d = right.hauteur();
    		int res = (g>d ? g:d);
    		return res+1;
    	}
     
    	public int taille(){
    		return 1+left.taille()+right.taille();
    	}
     
    	public String affichage(){
    		return "["+root+","+left.affichage()+","+right.affichage()+"]";
    	}
     
    	public void imprime(){
    		for (int i=0; i<1; i++){
    			System.out.println("   "+root);
    		}
    		for (int j=1; j<2; j++){
    			System.out.println(" /   \\ ");
    		}
     
    	}
    }
    et enfin ma page de test ou je crée mes nœuds et sag, et sad:
    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
     
    public class MesArbresBin {
     
    	public static void main(String[] args) {
    		BinTree<Integer> a0 = new Feuille<Integer>();
    		BinTree<Integer> a2 = new Noeud<Integer>(2,a0,a0);
    		BinTree<Integer> a4 = new Noeud<Integer>(4,a0,a0);
    		BinTree<Integer> a7 = new Noeud<Integer>(7,a0,a0);
    		BinTree<Integer> a01 = new Noeud<Integer>(0,a2,a7);
    		BinTree<Integer> a1 = new Noeud<Integer>(1,a01,a4);
     
    		System.out.println("Taille de a1 : "+a1.taille());
    		System.out.println("Hauteur de a1 : "+a1.hauteur());
    		System.out.println(a1.affichage());
    		a1.imprime();
     
    	}
     
    }

  6. #6
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 078
    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 078
    Points : 7 986
    Points
    7 986
    Par défaut
    J'ai pas de nullpointer avec ton code. J'obtiens ceci :

    Taille de a1 : 5
    Hauteur de a1 : 3
    [1,[0,[2,<>,<>],[7,<>,<>]],[4,<>,<>]]
    1
    / \
    evidement il manque la recursion pour avoir tout l'arbre. Et bonne amusement pour l'affichage
    (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

  7. #7
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut
    oui je n'ai pas afficher la methode qui me retourné un null, parque cette méthode été nul je pense
    est ce que tu aurais une idée sur la marche à suivre pour afficher la totalité de l'arbre comme débuté dans méthode imprime() ?
    merci

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Si tu veux afficher un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
          1
         / \
      1       1   
     / \     / \   
    1   1   1   1
    Y a du travail. Basiquement, c'est un problème algorithmique assez complexe. Ce n'est pas simplement récursif, car tu va devoir dessiner des noeuds cousins sur la même ligne. Ce n'est pas itératif non plus car tu va devoir dessiner de la tête à la racine.

    Basiquement l'algorithme de dessin de noeud N est:


    1 calculer récursivement la largeur et hauteur du fils gauche et celle du fils droit
    2 largeur de arbre = largeur gauche + largeur droit + noeud central
    3 hauteur de arbre = MAX (hauteur gauche,hauteur droit) + noeud central.
    4 avec ca calculer la position de noeud central, le dessiner,
    5 récursivement dessiner gauche et droit avec les coordonnées calculées

    Bon amusement

  9. #9
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 078
    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 078
    Points : 7 986
    Points
    7 986
    Par défaut
    Maintenant tu as la réponse a mon "Bon amusement" Gastonsc
    (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

Discussions similaires

  1. [C#] Convertir une String en Int ?
    Par Kylen dans le forum ASP.NET
    Réponses: 12
    Dernier message: 11/04/2012, 10h59
  2. [(cast)] convertir un char en int...
    Par APoLLoN1234 dans le forum C++
    Réponses: 12
    Dernier message: 15/03/2006, 23h15
  3. convertir un char en int / et prob d'espace
    Par yanchasp dans le forum C++
    Réponses: 20
    Dernier message: 07/02/2006, 19h17
  4. Convertir un void* en int ...?
    Par alex6891 dans le forum C++
    Réponses: 15
    Dernier message: 15/11/2005, 22h43
  5. [Conversion]Convertir un char[] en int
    Par ThanosT dans le forum Général Java
    Réponses: 10
    Dernier message: 11/11/2005, 12h23

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