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 :

Recherche énigmes Java


Sujet :

Langage Java

  1. #1
    Membre habitué
    Inscrit en
    Septembre 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 10
    Par défaut Recherche énigmes Java
    Bonjour à tous
    Pour passer le temps au boulot, on se pose des petites énigmes Java. Mais notre inspiration touche à sa fin. On est friand d'énigmes tenant en très peu de lignes de code, portant sur des subtilités du langage.
    Quelqu'un aurait-il un lien vers un site qui en propose ?

    A titre d'exemple, en voici 3:
    1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int i = 0;
    i = i++;
    Que vaut i ?

    2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    System.out.println(1+2+"");
    Affiche 3 ou 12 ?

    3)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    System.out.println(""+1f);
    Affiche 1, 1.0 ou 1f ?

  2. #2
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    http://brabant.developpez.com/java/c...ions/factices/

    Par contre c'est un poil plus relevé que tes exemples ...

  3. #3
    Membre habitué
    Inscrit en
    Septembre 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 10
    Par défaut
    Merci, mais ce n'est pas exactement ce que je cherche. Ce qu'il me faut, ce sont des énigmes qui tiennent en 4 lignes de code maxi pour les écrire au tableau.

  4. #4
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 746
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 746
    Par défaut
    Je me suis attaqué au questionnaire, et j'ai fait bien plus d'erreurs que je ne l'aurais cru

    La plupart du temps j'ai compris mon erreur rien qu'en regardant la réponse, mais pour les questions 6, 7 une explication détaillée ne serait pas superflue, car je n'ai pas compris mon erreur.

    Et la question 9 le code source de la question est traduit, mais pas les propositions ni la réponse

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Pour la 6 je me suis aussi fait avoir.
    En fait lorsqu'on désérialize une classe, le constructeur n'est pas appelé c'est le mécanisme de sérialisation qui s'occupe d'initialiser les champs.
    Par contre, comme il faut bien initialiser les champs des classes parentes non-sérialisable, c'est le constructeur par défaut de la première classe parente non-sérialisable qui est utilisé...
    Tout ceci est indiqué dans la doc de Serialisable : http://javasearch.developpez.com/j2s...ializable.html



    Pour la 7 cela vient du fait que la regexp "\d*" matchera un chiffre présent entre 0 et plusieurs fois.
    Donc cela retournera également tout les emplacements entre deux lettres...


    a++

  6. #6
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Tiens si vous voulez vous amusez un peu : quel est le résultat de ces trois bouts codes (s'ils compilent ?)

    Rappel : String implémente les interfaces Serializable et CharSequence

    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
    class Test {
     
    	public static void print(Serializable s) {
    		System.out.println("Serializable : " + s);
    	}
     
    	public static void print(Object o) {
    		System.out.println("Object : " + o);
    	}
     
    	public static void main(String[] args) {
     
    		print("Hello World !");
     
    	}
     
    }
    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
    class Test {
     
    	public static void print(CharSequence cs) {
    		System.out.println("CharSequence : " +cs);
    	}
     
    	public static void print(Serializable s) {
    		System.out.println("Serializable : " + s);
    	}
     
    	public static void print(Object o) {
    		System.out.println("Object : " + o);
    	}
     
    	public static void main(String[] args) {
     
    		print("Hello World !");
     
    	}
     
    }
    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
    class Test {
     
    	public static void print(String cs) {
    		System.out.println("String : " +cs);
    	}
     
    	public static void print(CharSequence cs) {
    		System.out.println("CharSequence : " +cs);
    	}
     
    	public static void print(Serializable s) {
    		System.out.println("Serializable : " + s);
    	}
     
    	public static void print(Object o) {
    		System.out.println("Object : " + o);
    	}
     
    	public static void main(String[] args) {
     
    		print("Hello World !");
     
    	}
     
    }
    a++

  7. #7
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    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
    class Test {
     
        public static void print(CharSequence cs) {
            System.out.println("CharSequence : " +cs);
        }
     
        public static void print(Serializable s) {
            System.out.println("Serializable : " + s);
        }
     
        public static void print(Object o) {
            System.out.println("Object : " + o);
        }
     
        public static void main(String[] args) {
     
            print("Hello World !");
     
        }
     
    }
    C'est parce qu'il ne sait pas se déterminer qu'il y a une erreur ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par OButterlin Voir le message
    C'est parce qu'il ne sait pas se déterminer qu'il y a une erreur ?
    Oui. Il n'y a pas de hierarchie dans les interfaces donc aucun moyen de savoir si "Serializable" est avant/après "CharSequence" au moment de l'appel (late binding).
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  9. #9
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    Oui. Il n'y a pas de hierarchie dans les interfaces donc aucun moyen de savoir si "Serializable" est avant/après "CharSequence" au moment de l'appel (late binding).
    Merci
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    Oui. Il n'y a pas de hierarchie dans les interfaces donc aucun moyen de savoir si "Serializable" est avant/après "CharSequence" au moment de l'appel (late binding).
    Oui tout à fait. Lors d'une surcharge comme ici c'est le compilateur qui détermine la méthode a appeler, selon le type déclaré des paramètres.

    Ici on a un paramètre de type String et dans les 3 cas toutes les méthodes sont "compatible". Le compilateur essaye alors de récupérer le type le plus précis.

    • Dans le premier cas, Serializable est plus précis que Object et sera donc utilisé. Object à le poids le plus faible et ne sera utilisé que dans le cas où aucune autre méthode ne correspond.
    • Dans le second, il n'y a aucun moyen de choisir entre Serializable et CharSequence puisque ce sont deux interfaces distinctes. Le compilateur signale donc l'ambiguïté par une erreur.
    • Enfin avec une méthode print(String) on a une égalité parfaite entre les paramètres de la signature de méthode et le type déclaré des paramètres de l'appel, donc le choix se fait sans ambiguïté



    a++

  11. #11
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Encore plus de fun avec la résolution de binding :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    public class Test {
     
    	public static void print(String s, CharSequence cs) {
    		System.out.println("String/CharSequence");
    	}
     
    	public static void print(Object o, String s) {
    		System.out.println("Object/String");
    	}
     
    	public static void main(String[] args) {
    		print("Hello World !", "I'm Here.");
    	}
    }

    (ah... la joie du chapitre 15.12.2.7 de la JLS)
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

Discussions similaires

  1. Recherche CMS java
    Par Invité dans le forum Développement Web en Java
    Réponses: 5
    Dernier message: 02/02/2007, 20h03
  2. Recherche Webmail Java
    Par stef01983 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 29/10/2006, 01h55
  3. Recherche Driver Java
    Par Julio_del_pueblo dans le forum DB2
    Réponses: 1
    Dernier message: 04/07/2006, 10h39
  4. recherche fonction java
    Par amel2006 dans le forum Langage
    Réponses: 3
    Dernier message: 01/03/2006, 17h02

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