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 :

compil string (suite et fin)


Sujet :

avec Java

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 40
    Par défaut compil string (suite et fin)
    Le dernier programme qui me pose probleme avec un string

    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
     
     
    class exo102 {
        static boolean egalite (char[] t, String s) {
               boolean res = false;
    	 for (int i=0; i<t.length; i++){
    	      t[0]= t[0] + 1;
    		  }
    	 for (int i=1; i<10; i++){
    	      s = s + i;
    		  if ( t[0] .equals s(0)){
    		res = true;
    	 }else{
    	    res = false;
    	  }
    	  return res;
    	  }
    	  }
     
      public static void main (String [] args) {
        char [] t1 = {'m','i','n','c','i'};
    	String s1 = "mince";
    	Terminal.ecrireStringln( "" + s1.equals (t1));
    	Terminal.ecrireStringln( " y a t'il les memes caracteres dans le meme ordre " + (egalite(t1,s1)));
    	}
        }
     
     
    //erreurs de compilations
    le compilateur m'indique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    C:\Documents and Settings\rohmer>javac "C:\Documents and Settings\rohmer\exo102.
    java"
    C:\Documents and Settings\rohmer\exo102.java:9: ')' expected
                      if ( t[0] .equals s(0)){
                                       ^
    C:\Documents and Settings\rohmer\exo102.java:9: ';' expected
                      if ( t[0] .equals s(0)){
                                            ^
    C:\Documents and Settings\rohmer\exo102.java:11: 'else' without 'if'
             }else{
              ^
    3 errors
    quesaco ??

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    il faut apprendre à lire les message et à revoir ton code. Le message dit qu'il s'attend à une parenthèse fermante après le equals. Ca signifie que quoi que tu aie mis à la place (ici un espace), ca n'a pas sa place là. De fait tu appelle la méthode equals -> tu doit utiliser () pour indiquer que t'appelle une méthode (et pas un champ).

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 40
    Par défaut
    Si quelqu'un peut m'aider a ecrire correctement les lignes 5 et 9
    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
     
     
    class exo102 {
        static boolean egalite (char[] t, String s) {
               boolean res = false;
    	 for (int i=0; i<t.length; i++){
    	      t[0]= t[0] + 1;
    		  }
    	 for (int i=1; i<10; i++){
    	      s = s + i;
    		  if ( t[0] .equals (s)){
    		res = true;
    	 }else{
    	    res = false;
    	  }
    	  return res;
    	  }
    	  }
     
      public static void main (String [] args) {
        char [] t1 = {'m','i','n','c','i'};
    	String s1 = "mince";
    	Terminal.ecrireStringln( "" + s1.equals (t1));
    	Terminal.ecrireStringln( " y a t'il les memes caracteres dans le meme ordre " + (egalite(t1,s1)));
    	}
        }
     
     
    //erreurs de compilations
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    C:\Documents and Settings\rohmer>javac "C:\Documents and Settings\rohmer\exo102.
    java"
    C:\Documents and Settings\rohmer\exo102.java:5: possible loss of precision
    found   : int
    required: char
                  t[0]= t[0] + 1;
                             ^
    C:\Documents and Settings\rohmer\exo102.java:9: char cannot be dereferenced
                      if ( t[0] .equals (s)){
                                ^
    2 errors

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    premier erreur. Tu additionne un char et un int, ca crée un int. Un int prenant plus de place qu'un char, quand tu resauve dans le char, tu pert en précision, ce qui peux poser problème. D'ou l'erreur. En java, quand tu descend en précision, t'es obligé de faire du typecasting exlpicite. Exemple dans ton cas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t[0]= (char)(t[0] + 1);

    Pour la deuxième erreur, char est un type de base, pas un objet, il ne posède donc aucun méthode et par voie de conséquence, aucun méthode "equals". D'ailleurs je vois pas ce qu'un méthode equals(String) ferait là.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 40
    Par défaut RE
    le programme compile

    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
     
    class exo102 {
        static boolean egalite (char[] t, String s) {
               boolean res = false;
    	 for (int i=0; i<t.length; i++){
    	      t[0]= (char) (t[0] + 1);
    		  }
    	 for (int i=1; i<10; i++){
    	      s = s + i;
    		  if ( t.length == s.length()){
    		res = true;
    	 }else{
    	    res = false;
    	  }
    	  }
    	  return res;
    	 } 
     
      public static void main (String [] args) {
        char [] t1 = {'m','i','n','c','i'};
    	String s1 = "mince";
    	Terminal.ecrireStringln( "" + s1.equals (t1));
    	Terminal.ecrireStringln( " y a t'il les memes caracteres dans le meme ordre " + (egalite(t1,s1)));
    	}
        }
     
     
    //programme ok

  6. #6
    Membre Expert
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 389
    Par défaut
    Je ne sais pas trop ce que tu veux faire, mais la ca risque de ne jamais faire ce que tu veux.

    Quelque remarques :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (int i=0; i<t.length; i++){
          t[0]= (char) (t[0] + 1);
    }
    à quoi ca sert de faire une boucle sur tous les éléments du tableau juste pour faire ca ?? tu pouvais faire direct

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t[0] = (char) f.length;
    ca reviens exactement à la même chose.

    d'apres ce que tu veux faire je ne crois pas que ton code puisse marcher. je te propose plustot celui-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    static boolean egalite (char[] t, String s) {
           boolean res = true;
     
           if (t.length == s.length) 
               for (int i=0; i< t.length; i++)
    	      if ( t[i] != s.chartAt(i)){
    		res = false;
    	        break;
                  } 
     
           return res;
    }

  7. #7
    Membre expérimenté Avatar de Torg666
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 230
    Par défaut
    Citation Envoyé par stephcast Voir le message
    le programme compile

    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
     
    class exo102 {
        static boolean egalite (char[] t, String s) {
               boolean res = false;
    	 for (int i=0; i<t.length; i++){
    	      t[0]= (char) (t[0] + 1);
    		  }
    	 for (int i=1; i<10; i++){
    	      s = s + i;
    		  if ( t.length == s.length()){
    		res = true;
    	 }else{
    	    res = false;
    	  }
    	  }
    	  return res;
    	 } 
     
      public static void main (String [] args) {
        char [] t1 = {'m','i','n','c','i'};
    	String s1 = "mince";
    	Terminal.ecrireStringln( "" + s1.equals (t1));
    	Terminal.ecrireStringln( " y a t'il les memes caracteres dans le meme ordre " + (egalite(t1,s1)));
    	}
        }
     
     
    //programme ok
    Ton algorithme n'est pas bon,tu n'as pas besoin de 2 boucle for, 1 seule suffit.
    De plus pour parcourrir ton "t" tu t'y prends pas comme il faut mais faire, pour parcourrir un tableau tu peu faire comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    for (int i=0 ;i<t.length;i++){
     System.out.println(t[i]);
    }
    //ou comme ca:
    int i=0;
    while(i<t.length){
     system.out.println(t[i]);
     i++;
    }
    Et pour un String tu peu faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for(int j=0; j<s.length();j++){
     System.out.println(s.charAt(j));
    }
    Au niveau de l'ago, tu peu commencer par tester si t et s on la meme longueur.
    Ensuite il te faut "simplement", par exemple prendre successivement les elements de "t" et le comparer a l'element de "s" correspondant.

    Evidement je te donne pas la solution, mais avec ca tu devrai arriver à trouver.
    Si tu as la javadoc, tu devrai regarder la classe String et notament un constructeur avec pour parametre char[] et la fonction compareto...
    bon là j'arrete je t en ai trop dis...
    Bonne chance

    Edit: Sovo, arrete de lui donner la solution clef en main tu l'aide pas! et en plus ton algo est faux

  8. #8
    Membre Expert
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 389
    Par défaut
    Citation Envoyé par Torg666 Voir le message
    Edit: Sovo, arrete de lui donner la solution clef en main tu l'aide pas! et en plus ton algo est faux
    C'est vrai, mais je voulais juste lui donner une idée.

    pour l'algo tu as raison, j'avais pas trop reflechis. j'ai fait un édit.

  9. #9
    Membre expérimenté Avatar de Torg666
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 230
    Par défaut
    Citation Envoyé par sovo Voir le message
    Je ne sais pas trop ce que tu veux faire, mais la ca risque de ne jamais faire ce que tu veux.

    Quelque remarques :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (int i=0; i<t.length; i++){
          t[0]= (char) (t[0] + 1);
    }
    à quoi ca sert de faire une boucle sur tous les éléments du tableau juste pour faire ca ?? tu pouvais faire direct

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t[0] = (char) f.length;
    ca reviens exactement à la même chose.

    d'apres ce que tu veux faire je ne crois pas que ton code puisse marcher. je te propose plustot celui-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    static boolean egalite (char[] t, String s) {
           boolean res = true;
     
           if (t.length == s.length) 
               for (int i=0; i< t.length; i++)
    	      if ( t[i] != s.chartAt(i)){
    		res = false;
    	        break;
                  } 
     
           return res;
    }
    Arf en plus tu lui montre du code crado (arf un break qui sert a rien du tout!!)
    A la limite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    static boolean egalite (char[] t, String s) {
     if(t.length==s.length){
      for(int i=0; i<t.lenght; i++){
       if(t[i]!=s.charAt(i)){
        return false;
       }
      }
     }else{
      return false;
     }
     return true;
    }
    Dans le monde merveilleux des bisounours:
    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
     
    static boolean egalite (char[] t, String s) {
     boolean res=true;
     if(t.length==s.length){
      for(int i=0;i<t.length;i++){
        if(t[i]!=s.charAt(i)){
         res=false;
         i=t.length;
        }
      }
     }else{
      res=false;
     }
     return res;
    }
    Mais ca on le fais jamais, trop long à ecrire

  10. #10
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 380
    Par défaut
    Bonjour,

    C'est vrai qu'il manque le cas ou les tailles sont différentes.

    Mais, je ne vois pas bien ce qui ne va pas avec le 'break'?

    a+

  11. #11
    Membre expérimenté Avatar de Torg666
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 230
    Par défaut
    Citation Envoyé par eric39 Voir le message
    Bonjour,

    C'est vrai qu'il manque le cas ou les tailles sont différentes.

    Mais, je ne vois pas bien ce qui ne va pas avec le 'break'?

    a+

    Je dis ça parcequ'on m'a toujours martellé qu'il fallait éviter d'utiliser le break quand ce n'est pas absolument nécessaire. Dans ce cas bien prècis, le plus propre c'est de remplir la condition de la boucle For plutôt que de "flingue" la boucle comme un sauvage
    Maintenant c'est peu être un "connerie", mais je prefere un return à un break voir même faire ce que j'ai fais dans le "monde merveilleux des bisounours".

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par Torg666 Voir le message
    J qu'il fallait éviter d'utiliser le break quand ce n'est pas absolument nécessaire.
    Y a pas de raison, il est plus propre de mettre des break dans ta boucle que d'aligner des conditions de sortie kilométriques dans le for.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/09/2012, 19h54
  2. problème de conversion avec dateadd - suite et fin
    Par Bourezak dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 31/01/2008, 13h57
  3. Tableaux de string (suite)
    Par Claude URBAN dans le forum C++
    Réponses: 3
    Dernier message: 09/08/2006, 11h13
  4. Réponses: 4
    Dernier message: 22/02/2006, 14h11
  5. [affichage d'une image] suite et fin
    Par mavina dans le forum 2D
    Réponses: 3
    Dernier message: 31/12/2005, 00h15

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