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 :

Créer une classe capable de gérer des nombres rationnels


Sujet :

avec Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Créer une classe capable de gérer des nombres rationnels
    Bonjour

    Je suis confronté à une difficulté car comme dit dans le titre on me demande crée une class capable de gérer des nombres rationnels
    Avec pour attribut numerateur et denominateur

    Mes voilà là je n'y arrive pas seul je demande donc votre aide.

    Car il faut que je fasse en sorte que les instanciations:

    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
    myRational r1 = new myRational(1,3);
    myRational r2 =new myRational("1/3")
     
    Soient possibles pour le rationnel 1/3.
     
     
     
     
    public class MyRational {
     
    	public MyRational(int i, int j) {
     
    		int numerateur = i;
    		int denominateur = j;
    		int retour ;
     
    			if(denominateur != 0) {
    				retour=numerateur/denominateur;
    			}
    	}
    }
    Voilà ou j’en suis pour le moment

    Merci d’avance pour votre aide

  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
    T'as pas oublié de mettre la question la ?

    Enfin sinon si j'ai bien compris, il te manque le constructeur qui prends le string en paramètres.

    Un du genre devrait faire l'affaire non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public  MyRational(String numberCertainFormat)
      {
    	  String split[] = numberCertainFormat.split("/");
    	  int num = new Integer(""+split[0]);
    	  int den = new Integer(""+split[1]); 
      }
    (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
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Bonjour,

    Première conseil : si tu poste du code sur ce forum utilise la balise code. Exemple dans ton cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    myRational r1 = new myRational(1,3);
    myRational r2 =new myRational("1/3")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class MyRational {
     
    	public MyRational(int i, int j) {
     
    		int numerateur = i;
    		int denominateur = j;
    		int retour;
     
    		if (denominateur != 0) {
    			retour = numerateur / denominateur;
    		}
    	}
    }
    Pour ce qui est de tes constructeurs :
    i/j/retour sont déclaré comme des variables de fonction et non de classe.
    Ce qui fait qu'à la fin de ton constructeur les valeurs sont perdu.

    La valeur de retour ne devrait pas être calculer dans le constructeur. Mais dans une méthode d'accès.
    Note : Ici ton retour est un résultat entre type int et est un int. Donc tu n'aura que la partie entière du résultat.

    Pour le constructeur avec le string. Il te fait faire un slipt par rapport au "/". et convertir les deux parties en entier. (et gérer les différents cas)

    Voici une solution :
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    public class MyRational {
    	private int numerateur = 0;
    	private int denominateur = 1;
     
    	public int getDenominateur() {
    		return denominateur;
    	}
     
    	public void setDenominateur(int denominateur) {
    		this.denominateur = denominateur;
    	}
     
    	public int getNumerateur() {
    		return numerateur;
    	}
     
    	public void setNumerateur(int numerateur) {
    		this.numerateur = numerateur;
    	}
     
    	public MyRational(int i, int j) {
    		numerateur = i;
    		denominateur = j;
    	}
     
    	public float getRetour() {
    		return ((float) numerateur) / ((float) denominateur);
    	}
     
    	public MyRational(String fraction) {
    		if (fraction.length() == 0) {
    			throw new IllegalArgumentException(
    					"L'argument n'est pas correcte : chaîne vide.");
    		}
    		String[] nombres = fraction.split("/");
    		switch (nombres.length) {
    		case 0:
    			throw new IllegalArgumentException(
    					"L'argument n'est pas correcte : chaîne vide.");
    		case 2:
    			try {
    				denominateur = Integer.parseInt(nombres[1]);
    			} catch (Exception e) {
    				throw new IllegalArgumentException(
    						"L'argument n'est pas correcte : le dénominateur n'est pas un nombre.");
    			}
    		case 1:
    			try {
    				numerateur = Integer.parseInt(nombres[0]);
    			} catch (Exception e) {
    				throw new IllegalArgumentException(
    						"L'argument n'est pas correcte : le numérateur n'est pas un nombre.");
    			}
    			break;
    		default:
    			throw new IllegalArgumentException(
    					"L'argument n'est pas correcte : n'est pas le format d'une fraction simple");
    		}
    	}
     
    	public static void main(String[] args) {
    		MyRational r1 = new MyRational(1, 3);
    		MyRational r2 = new MyRational("45");
    		MyRational r3 = new MyRational("45/45");
    		System.out.println(r1.getNumerateur());
    		System.out.println(r1.getDenominateur());
    		System.out.println(r1.getRetour());
    		System.out.println(r2.getNumerateur());
    		System.out.println(r2.getDenominateur());
    		System.out.println(r2.getRetour());
    		System.out.println(r3.getNumerateur());
    		System.out.println(r3.getDenominateur());
    		System.out.println(r3.getRetour());
    	}
    }
    Je te dé-conseil de l'utiliser directement. Recherche plus à comprendre la logique et faire ton propre code.

    Cordialement,
    Patrick Kolodziejcyzk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  4. #4
    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
    Je te dé-conseil de l'utiliser directement. Recherche plus à comprendre la logique et faire ton propre code.
    Moi qui trouvais que j'avais déjà été trop loin en remplissant le constructeur
    (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
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par kolodz Voir le message
    Bonjour,

    Première conseil : si tu poste du code sur ce forum utilise la balise code. Exemple dans ton cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    myRational r1 = new myRational(1,3);
    myRational r2 =new myRational("1/3")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class MyRational {
     
    	public MyRational(int i, int j) {
     
    		int numerateur = i;
    		int denominateur = j;
    		int retour;
     
    		if (denominateur != 0) {
    			retour = numerateur / denominateur;
    		}
    	}
    }
    Pour ce qui est de tes constructeurs :
    i/j/retour sont déclaré comme des variables de fonction et non de classe.
    Ce qui fait qu'à la fin de ton constructeur les valeurs sont perdu.

    La valeur de retour ne devrait pas être calculer dans le constructeur. Mais dans une méthode d'accès.
    Note : Ici ton retour est un résultat entre type int et est un int. Donc tu n'aura que la partie entière du résultat.

    Pour le constructeur avec le string. Il te fait faire un slipt par rapport au "/". et convertir les deux parties en entier. (et gérer les différents cas)

    Voici une solution :
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    public class MyRational {
    	private int numerateur = 0;
    	private int denominateur = 1;
     
    	public int getDenominateur() {
    		return denominateur;
    	}
     
    	public void setDenominateur(int denominateur) {
    		this.denominateur = denominateur;
    	}
     
    	public int getNumerateur() {
    		return numerateur;
    	}
     
    	public void setNumerateur(int numerateur) {
    		this.numerateur = numerateur;
    	}
     
    	public MyRational(int i, int j) {
    		numerateur = i;
    		denominateur = j;
    	}
     
    	public float getRetour() {
    		return ((float) numerateur) / ((float) denominateur);
    	}
     
    	public MyRational(String fraction) {
    		if (fraction.length() == 0) {
    			throw new IllegalArgumentException(
    					"L'argument n'est pas correcte : chaîne vide.");
    		}
    		String[] nombres = fraction.split("/");
    		switch (nombres.length) {
    		case 0:
    			throw new IllegalArgumentException(
    					"L'argument n'est pas correcte : chaîne vide.");
    		case 2:
    			try {
    				denominateur = Integer.parseInt(nombres[1]);
    			} catch (Exception e) {
    				throw new IllegalArgumentException(
    						"L'argument n'est pas correcte : le dénominateur n'est pas un nombre.");
    			}
    		case 1:
    			try {
    				numerateur = Integer.parseInt(nombres[0]);
    			} catch (Exception e) {
    				throw new IllegalArgumentException(
    						"L'argument n'est pas correcte : le numérateur n'est pas un nombre.");
    			}
    			break;
    		default:
    			throw new IllegalArgumentException(
    					"L'argument n'est pas correcte : n'est pas le format d'une fraction simple");
    		}
    	}
     
    	public static void main(String[] args) {
    		MyRational r1 = new MyRational(1, 3);
    		MyRational r2 = new MyRational("45");
    		MyRational r3 = new MyRational("45/45");
    		System.out.println(r1.getNumerateur());
    		System.out.println(r1.getDenominateur());
    		System.out.println(r1.getRetour());
    		System.out.println(r2.getNumerateur());
    		System.out.println(r2.getDenominateur());
    		System.out.println(r2.getRetour());
    		System.out.println(r3.getNumerateur());
    		System.out.println(r3.getDenominateur());
    		System.out.println(r3.getRetour());
    	}
    }
    Je te dé-conseil de l'utiliser directement. Recherche plus à comprendre la logique et faire ton propre code.

    Cordialement,
    Patrick Kolodziejcyzk.

    Bas la rien à dire merci à vous 2 c'est parfait j'ai plus cas apprendre tout sa

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 281
    Points : 321
    Points
    321
    Par défaut
    Tu pourrais même implémenter des méthodes pour additionner, soustraire,, opposé, inverse, multiplier ...

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Je suggère déjà comparaison de deux rationnels. Ce qui va obliger à réduire la fraction au pgcd.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    à mon pas très humble avis des objets de ce type devraient être immuables (champs final) car ce sont des objets "valeur"
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

Discussions similaires

  1. Créer une classe pour gérer recette de cuisine
    Par filoulebauju dans le forum C++
    Réponses: 4
    Dernier message: 03/12/2013, 12h43
  2. [Web Service] Créer une classe avec des "complexType"
    Par nawbacan dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 19/10/2010, 17h24
  3. Créer une classe avec des attributs variables?
    Par umeboshi dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/05/2010, 14h25
  4. Comment créer une table sas pour gérer des queries
    Par arnaldo1974 dans le forum Administration et Installation
    Réponses: 1
    Dernier message: 02/12/2009, 14h39
  5. Réponses: 1
    Dernier message: 05/06/2007, 12h04

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