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 :

message d'erreur pour une condition if


Sujet :

Langage Java

  1. #1
    Membre du Club
    Homme Profil pro
    -
    Inscrit en
    Novembre 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : -

    Informations forums :
    Inscription : Novembre 2007
    Messages : 64
    Points : 45
    Points
    45
    Par défaut message d'erreur pour une condition if
    Bonsoir a tous,

    J'ai un devoir à faire en java et j'ai un problème pour mettre une condition dans mon programme. en fait, quand je saisie un nombre, mon programme les place dans un tableau, mais je veut qu'au moment ou je tape 0, la saisie sarrete. J'ai donc essayé de mettre une condition if, mais j'obtiens le message d'erreur suivant: The operator > is undefined for the argument type(s) String, int

    voici une parti de mon code:

    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
    public static void main( String args[] ) throws IOException {
    		BufferedReader in ;
    		String duree ;
    		String poids2;
    		int poids [];
    		int taille;
    		int i;
    		int cpt;
    ...
    		taille=10;
    		cpt=1;
    		i=0;
    ...
    			while (i<taille){
    			if (poids2>0){
    			System.out.print( "entrez le poids du chien n° "+cpt) ;
    			poids2 = in.readLine( ) ;
    			poids[ i ] = Integer.parseInt( poids2 ) ;
    			cpt++;
    			i++;
    			}
    		}
    J'obtiens aussi le même message pour:

    P.S: tout ce qui est en gras contient une erreur

  2. #2
    Membre actif Avatar de djidane39
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 272
    Points : 250
    Points
    250
    Par défaut
    poids2 est une string, tu peu pas comparer u entier et une string
    pour ça il faut que tu cast ta string en int

  3. #3
    Membre actif Avatar de djidane39
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 272
    Points : 250
    Points
    250
    Par défaut
    pour caster ue string en int:
    int poids2Int = Integer.getInteger(poids2);
    et aprés tu fait ton if(poids2Int > 0)

  4. #4
    Membre du Club
    Homme Profil pro
    -
    Inscrit en
    Novembre 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : -

    Informations forums :
    Inscription : Novembre 2007
    Messages : 64
    Points : 45
    Points
    45
    Par défaut
    J'ai rajouté la ligne "int poids2Int = Integer.getInteger(poids2);"
    Mais une autre erreur intervient, et me dit que poids2 n'est pas initialisé.
    Quand je rajoute poids2=0; , il me dit "Type mismatch: cannot convert from int to String"

    Je ne sais pas du tout ce qu'il faut faire, j'ai bien rajouté les lignes, mais rien ne fonctionne

  5. #5
    Membre actif Avatar de djidane39
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 272
    Points : 250
    Points
    250
    Par défaut
    en effet il faut bien initialisé poids2, mais par par 0 (sinon java croit que tu essaie d'affecter un entier à une chaine.
    tu doit plutot initialiser

  6. #6
    Membre actif Avatar de djidane39
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 272
    Points : 250
    Points
    250
    Par défaut
    un petit conseil si tu veu être tranquil par la suite:
    essay de rendre ton code plus propre en utilisant les standard java qui sont par exemple:
    while (i < taille) {
    au lieu de
    while (i<taille){

    ton code est ainsi plus aéré, et plus lisible ^_^
    si tu prend direct les bons réflex, ça sera plus facile par la suite, et t'aura pas à changer ta façon de coder ^_^ (de toute façon un jour ou l'autre faudra t'y mettre donc autant gagner du temps en le faisant tout de suite ^_^)
    c'est qu'un conseil, fais-en ce que tu veu

  7. #7
    Membre éclairé

    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 510
    Points : 803
    Points
    803
    Par défaut
    bonjour,

    je viens de penser a quelque chose il ne serai pas plus simple au lieu de réaliser un if de faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    switch (poids2){
     
       case "0" : ... // traitement
                break;
       default : // traitement
                break;
    }
    voila c'est juste une proposition je ne suis pas sur que le swith prennent les chaines de caracteres mais au pire tu peux toujours faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if("0".equals(poids2))
    {
    //traitement
    }
    else { 
    //traitement
    }
    "La seule chose dont je sois certain, c'est que je doute"
    j'ai cassé ma boule de cristal veuillez être clair et précis dans vos propos
    compilateur - 1 nayah - 0
    PS : je suis un

  8. #8
    Membre du Club
    Homme Profil pro
    -
    Inscrit en
    Novembre 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : -

    Informations forums :
    Inscription : Novembre 2007
    Messages : 64
    Points : 45
    Points
    45
    Par défaut
    lol merci pour tout ces conseils, c'est vrai que sa manque d'espace ^^

    Mais en fait, quand j'ai rajouté poids2= "0"; j'obtiens ce message: Exception in thread "main" java.lang.NullPointerException
    at fraisejours.main(fraisejours.java:34)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    while (i<taille){
    			int poids2Int = Integer.getInteger(poids2);
    			if(poids2Int > 0){
    			System.out.print( "entrez le poid du chien n° "+cpt) ;
    			poids2 = in.readLine( ) ;
    			poids[ i ] = Integer.parseInt( poids2 ) ;
    			cpt++;
    			i++;
    			}
    		}
    J'ai donc cherché pourquoi ce message est apparu, et suis tombé sur cette page

    Mais je ne comprend toujours pas comment cela fonctionne. J'ai ajouté le equal dans mon programme, mais sa ne fait qu'un tour de boucle avant de planter.

    (la ligne en gras est celle concerné)

  9. #9
    Membre éclairé

    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 510
    Points : 803
    Points
    803
    Par défaut
    tu as essayer de faire ton if comme dans l'exemple que j'ai posté au dessus ? avec l'equals?
    si tu essaye pense que tu n'a plus besoin de transformer ta chaine de caratere donc tu dois supprimer cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int poids2Int = Integer.getInteger(poids2);
    cette méthode compare deux strings... StringA.equal(StringB) elle renvoie true si StrinB = StringA et false dans le cas contraire.
    le null pointer exception et logique vu que tu initialise ta valeur a 0 et dans ton if tu prend uniquement le cas ou poids2 est supérieur a 0 d'ou ton probleme tu devrai essayer de rajouter un else quitte a faire :
    "La seule chose dont je sois certain, c'est que je doute"
    j'ai cassé ma boule de cristal veuillez être clair et précis dans vos propos
    compilateur - 1 nayah - 0
    PS : je suis un

  10. #10
    Membre du Club
    Homme Profil pro
    -
    Inscrit en
    Novembre 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : -

    Informations forums :
    Inscription : Novembre 2007
    Messages : 64
    Points : 45
    Points
    45
    Par défaut
    enfin sa fonctionne trop content ^^ merci nayah.

    J'ai encore un dernier problème cependant, qui est le suivant:

    j'ai voulu faire ce calcul:
    Et j'obtiens toujours le même message "The operator * is undefined for the argument type(s) String, int"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    		
    BufferedReader in ;
    String duree ;
    ...
    		in = new BufferedReader( new InputStreamReader( System.in ) ) ;
    		System.out.println( "Quel est la durée du séjour ?" ) ;
    		//saisie de la duree
    		duree = in.readLine( ) ;
    		int dureeInt = Integer.getInteger(duree);
    ...
    tarif=tarif*dureeInt;
    J'ai essayé de rajouter cette ligne int dureeInt = Integer.getInteger(duree);
    mais sa ne fonctionne pas, ou alors je l'ai mis au mauvais endroit ?

    J'obtiens le même message d'erreur:
    Exception in thread "main" java.lang.NullPointerException
    at fraisejours.main(fraisejours.java:32)

  11. #11
    Inactif  
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    497
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 497
    Points : 312
    Points
    312
    Par défaut
    Bonjour,

    Ce == fonctionne pour comparer les valeurs de variables primitives (int, float ... ) et déterminer si ils sont égales, mais pas sur les objets.

    Cependant, si c'est les instances qui sont comparées, (deux instances de la Class String), l'opérateur == retournera false.

    Bien qu'il s'agit de textes identiques, mais d'objets différents !

    Donc introduction des notions de référence, pointeurs, ect ... Les 2 instances de la classe String donc, sont gérées par des pointeurs différents, et ne sont pas égales.

    car ecrire ceci :

    Revient à comparer la référence de String1 par rapport à la référence String2.

    Ne donne pas le résultat demandé !

    Pour vérifier l'égalité de deux instances, il y a 'equals' de la Class Object

    Les classes String et Boolean ont surchargées cette méthode equals(),

    De cette manière :

    String1.equals(String2) renvoie true (vrai) ou false (faux) selon que les 2 objets String contiennent ou non la même chose.

    A noter que String1.equals(String2) donne le même résultat que String2.equals(String1).

  12. #12
    Membre chevronné
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Points : 2 011
    Points
    2 011
    Par défaut
    Citation Envoyé par nayah Voir le message
    bonjour,

    je viens de penser a quelque chose il ne serai pas plus simple au lieu de réaliser un if de faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    switch (poids2){
     
       case "0" : ... // traitement
                break;
       default : // traitement
                break;
    }
    voila c'est juste une proposition je ne suis pas sur que le swith prennent les chaines de caracteres mais au pire tu peux toujours faire
    Je confirme que le swith ne fonctionne pas avec des chaînes de caractères (contrairement au C#).

    -"Tout ça me paraît très mal organisé. Je veux déposer une réclamation. Je paye mes impôts, après tout!"
    -"JE SUIS LA MORT, PAS LES IMPÔTS! MOI, JE N'ARRIVE QU'UNE FOIS".

    Pieds d'argile (1996), Terry Pratchett 1948 - 2015
    (trad. Patrick Couton)

  13. #13
    Membre éclairé

    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 510
    Points : 803
    Points
    803
    Par défaut
    bon pour te répondre j'aurai besoin d'un peu plus de données tu peux me dire d'ou sort ce tarif ? pourrai tu me poster le bout de code ou il intervient s'il te plait ?

    PS : Merci de la précision deadpool
    "La seule chose dont je sois certain, c'est que je doute"
    j'ai cassé ma boule de cristal veuillez être clair et précis dans vos propos
    compilateur - 1 nayah - 0
    PS : je suis un

  14. #14
    Membre du Club
    Homme Profil pro
    -
    Inscrit en
    Novembre 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : -

    Informations forums :
    Inscription : Novembre 2007
    Messages : 64
    Points : 45
    Points
    45
    Par défaut
    J'avais bien compris la fonction du == 19cmos83, enfin presque puisque je ne savais pas que c'etait appliquable que pour int float,...

    Pour le switch j'ai egalement testé, et il ne fonctionne pas avec String ^^

    Enfin pour la fonction du tarif, je poste le bout de code où il intervient :

    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
     
    tarif=0;
    tpchien=13.00;
    pchien=14.50;
    mchien= 16.00;
    gchien= 18.00;
    tgchien= 19.00;
    ...
    for (int y=0; y<poids.length; y++){
    			if (poids[y]==0){
    				tarif= tarif+0;
    			}
    			else if (poids[y]<=8){
    				tarif= tarif+tpchien;
    			}
    			else if (poids[y]<=23){
    				tarif= tarif+pchien;
    			}
    			else if (poids[y]<=40){
    				tarif= tarif+mchien;
    			}
    			else if (poids[y]<=55){
    				tarif= tarif+gchien;
    			}
    			else if (poids[y]>=56){
    				tarif= tarif+tgchien;
    			}
    }

  15. #15
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Bonjour.
    [mode HS]
    ça devrait faire partie de Java 7 (switch sur les chaines).

  16. #16
    Membre éclairé

    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 510
    Points : 803
    Points
    803
    Par défaut
    bon alors franchement je comprends pas pourquoi tu t'ennuis avec un string ce que tu veux récuperer c'est un int c'est ca ?

    alors au lieu d'utiliser readline tu devrai faire :




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    int durée;
     
    try {
            BufferedReader entree = new BufferedReader(new InputStreamReader(System.in));
    	String str = entree.readLine();
    	Double dd = Double.valueOf(str);
    	n = dd.doubleValue();
            durée = (int) n;
    }  
    catch( java.io.IOException ioe ) {}
    comme ca tu pourra faire ta multiplication entre entier.
    "La seule chose dont je sois certain, c'est que je doute"
    j'ai cassé ma boule de cristal veuillez être clair et précis dans vos propos
    compilateur - 1 nayah - 0
    PS : je suis un

  17. #17
    Membre du Club
    Homme Profil pro
    -
    Inscrit en
    Novembre 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : -

    Informations forums :
    Inscription : Novembre 2007
    Messages : 64
    Points : 45
    Points
    45
    Par défaut
    wow j'ai encore beaucoup à apprendre sur le java lol notre prof nous avais jamais appris ça ! Enfin bref ça fonctionne parfaitement le calcul se fait correctement ^^ merci à tous !

  18. #18
    Membre éclairé

    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 510
    Points : 803
    Points
    803
    Par défaut
    si ca peut te rassurer je suis débutant aussi mais c'est un des premiers bout de code qu'il y a dans mon bouquin de java (juste aprés le traditionnel programme Hello )

    content d'avoir pu t'aider et a bientot

    PS : pense au tag résolu
    "La seule chose dont je sois certain, c'est que je doute"
    j'ai cassé ma boule de cristal veuillez être clair et précis dans vos propos
    compilateur - 1 nayah - 0
    PS : je suis un

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB.NET] Message d'erreur pour une exception mémoire
    Par toutounesan dans le forum Windows Forms
    Réponses: 1
    Dernier message: 10/10/2011, 12h11
  2. message d'erreur pour une ligne
    Par KOUKI SAMIA dans le forum MATLAB
    Réponses: 1
    Dernier message: 04/01/2011, 15h16
  3. message d'erreur pour supprimer une table
    Par marco361020 dans le forum Access
    Réponses: 4
    Dernier message: 22/11/2006, 17h22

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