Puzzler.

Slides:



Advertisements
Présentations similaires
Le mécanisme des exceptions
Advertisements

L’ interruption de boucle
1 Tableaux des objets C++ si on connaît le nombre dobjets nécessaires davance on peut utiliser des tableau dobjets dans les fonctions dusage class Personne.
Programmer en JAVA par Tama
Exercice 1 1 (père) et 1 (fils) 1 (père) et 0 (fils)
Les fonctions en Java Partie I Le type void. Dans cette rapide présentation, je vais expliquer :.à quoi servent les fonctions.à quoi faut-il penser avant.
BlueJ_XI 1 Java, les objets : tout de suite ! Gestion des erreurs : les exceptions Notes de cours associées au chapitre 11 tutorial BlueJ
Structures de données et algorithmes – TP2
POO-L3 H. Fauconnier1 Chapitre IV 1. classe Object, clonage 2. interfaces 3. classes internes et imbriquées.
Faculté I&C, Claude Petitpierre, André Maurer 1 Java.
Badr Benmammar Programmation concurrente et temps réel en Java Badr Benmammar
Chapitre VII Généricité. POO-L3 H. Fauconnier2 Chapitre VII 1. Principes généraux 2. Types génériques imbriqués 3. Méthodes génériques 4. Types paramètres.
Master 1 SIGLIS java Lecteur Stéphane Tallard Chapitre 4 – Structures de contrôle.
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke JavaCC.
IFT 6800 Atelier en Technologies d’information
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
Badr Benmammar Programmation concurrente et temps réel en Java Badr Benmammar
Cours 5 Héritage, Interfaces, classes internes. POO-L3 H. Fauconnier2 La classe Object Toutes les classes héritent de la classe Object Object méthodes:
COURS DE PROGRAMMATION ORIENTEE OBJET :
CSI1502 Principes fondamentaux en conception des logiciels Chapter 8: Gestion des exceptions.
CSI 1502 Principes fondamentaux de conception de logiciels
Intention Séparer et extraire les traitements appliquées à différents type de nœuds d’une structure.
Objectifs À la fin de ce cours, vous serez capables de :
1 Fichers Binaires, Accès Direct et Objets. 2 Données binaires. Il s'agit ici de lire et écrire des données binaires par opposition à du texte. Pour ce.
Cours 7 Classes locales Clonage Divers: tableaux.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Les erreurs communes en Java.
Tutorat en bio-informatique
Les classes et les objets Les données finales class A { … private final int n = 20 ; // la valeur de n est définie dans sa déclaration … } class A { public.
Cours du 5 novembre.
Héritage H. Batatia. plan Notion (que signifie l’héritage) Ecriture en java Héritage multiple (interdit) Instanciation (partie propre et partie héritée)
Introduction à la programmation objet avec java
Généricité.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Correction du TD Chapitre 2.
Chapitre VII Généricité. POO-L3 H. Fauconnier2 Chapitre VII 1. Principes généraux 2. Types génériques imbriqués 3. Types paramètres bornés 4. Méthodes.
Fichiers et entrées-sorties en Java File and Input-ouput in Java J.M. Vanel Conseil informatique, architecture
Stéphane Frénot, Frederique Laforest, Frédéric Le-Mouël IJA 1 TD 6 IJA Structures de données JAVA.
CINI – Li115 1 Semaine 11 Les pointeurs (suite) ● Tableaux et pointeurs ● Questions sur les pointeurs.
JAVA.
Environnement de développement des BD
Les Exceptions Rémi Forax
LES TABLEAUX EN JAVA.
Pas de variable globale
Détection des erreurs.
TP N°2 : les Adresses IP *IP: Internet Protocol
PROJET JAVA Automatisation d’une rame de métro
I21 Algorithmique et programmation II
Concurrence Opérations atomiques Rémi Forax
Les exceptions Rémi Forax
E) Constructeurs et héritage
Bonnes pratiques Orienté Objet et Java
Package traçable Tatiana Aubonnet.
Développement d’applications interactives
Semaine #2 INF130 par Frédérick Henri.
B. Liskov, Program Development in Java, chap. 4 Exceptions
Schéma de conception Factory Method Exemple
Programmation par Objets et Java
Opérateurs et fonctions arithmétiques Opérateurs de relation Opérateurs logiques Cours 02.
Quelle est la valeur de S après exécution des instructions suivantes :
Chapitre 10 Polymorphisme
Le langage C# : Partie 1.
INTERFACE ET POLYMORPHISME
Les arbres généraux.
renvoie la moyenne d’un tableau d’entiers
Listes Chaînées.
STREAMS (et fichiers).
Variables et accès en Java
Retour sur les interfaces
TP RC.
Transcription de la présentation:

Puzzler

Puzzler C'est quoi un Puzzler ?

Modèle d'exécution Java Puzzler Modèle d'exécution Java

Puzzler Qu'affiche ce code ? public class Parsing { /** * Returns Integer corresponding to s, or null if s is null. * @throws NumberFormatExceptionif s is non null and * doesn't represent a valid integer */ public static Integer parseInt(String s) { return (s==null)?(Integer)null:Integer.parseInt(s); } public static void main(String[] args) { System.out.println(parseInt("-1") + " " + parseInt(null) + " " + parseInt("1"));

Puzzler - Réponse NPE car null est un Integer et Integer.parseInt() renvoie un int donc il y a un auto-unboxing de null. public class Parsing { public static Integer parseInt(String s) { return (s==null)?(Integer)null:Integer.parseInt(s); } public static void main(String[] args) { System.out.println(parseInt("-1") + " " + parseInt(null) + " " + parseInt("1"));

Puzzler - Fix Evitez de mixer type primitif et wrapper, surtout avec ?: Attention au boxing/unboxing de null public class Parsing { public static Integer parseInt(String s) { return (s==null)?null:Integer.valueOf(s); } public static void main(String[] args) { System.out.println(parseInt("-1") + " " + parseInt(null) + " " + parseInt("1"));

Puzzler Qu'affiche ce code ? public class Parsing { /** * Returns Integer corresponding to s, or null if s is null. * @throws NumberFormatExceptionif s is non null and * doesn't represent a valid integer */ public static Integer parseInt(String s) { return (s==null)?(Integer)null:Integer.parseInt(s); } public static void main(String[] args) { System.out.println(parseInt("-1") + " " + parseInt(null) + " " + parseInt("1"));

Puzzler - Réponse NPE car null est un Integer et Integer.parseInt() renvoie un int donc il y a un auto-unboxing de null. public class Parsing { public static Integer parseInt(String s) { return (s==null)?(Integer)null:Integer.parseInt(s); } public static void main(String[] args) { System.out.println(parseInt("-1") + " " + parseInt(null) + " " + parseInt("1"));

Puzzler - Fix Evitez de mixer type primitif et wrapper, surtout avec ?: Attention au boxing/unboxing de null public class Parsing { public static Integer parseInt(String s) { return (s==null)?null:Integer.valueOf(s); } public static void main(String[] args) { System.out.println(parseInt("-1") + " " + parseInt(null) + " " + parseInt("1"));

Puzzler Qu'affiche ce code ? public class BeyondCompare{ public static void main(String[] args) { Object o=3; System.out.println(new Double(3).compareTo(o)==0); }

Puzzler - Réponse Il compile en 1.4 (mais CCE à l'exécution) mais pas en 1.5 !! Comparable indique avec quoi comparé Et Double est définie comme ceci : public interface Comparable<T> { int compareTo(T t); // avant c'était Object } public class Double extends Number implements Comparable<Double> { ... }

Puzzler - Fix Il faut utiliser un Double : Et donc comparer les Double entre eux Normalement, la compatibilité binaire est assurée, ici non car cela permet de détecter une CCE à la compilation public class BeyondCompare{ public static void main(String[] args) { Double o=3; System.out.println(Double.valueOf(3).compareTo(o)==0); }

Puzzler Qu'affiche ce code ? public class Fibonacci { private static final int LENGTH=7; public static void main(String[] args) { int[] fib=new int[LENGTH]; fib[0]=fib[1]= 1; // First 2 Fibonacci numbers for (int i=2; i<fib.length;i++) fib[i]=fib[i -2]+fib[i -1]; System.out.println(Arrays.asList(fib)); }

Puzzler - Réponse Une valeur de hachage [[I@ad3ba4 Arrays.asList(T...) prend un tableau d'objet pas un tableau de type primitif !! public class Fibonacci { private static final int LENGTH=7; public static void main(String[] args) { int[] fib=new int[LENGTH]; fib[0]=fib[1]= 1; // First 2 Fibonacci numbers for (int i=2; i<fib.length;i++) fib[i]=fib[i -2]+fib[i -1]; System.out.println(Arrays.asList(fib)); }

Puzzler - Fix Integer != int Ne pas utiliser Arrays.asList() juste popur faire l'affichage, utiliser Arrays.toString() !! public class Fibonacci { private static final int LENGTH=7; public static void main(String[] args) { int[] fib=new int[LENGTH]; fib[0]=fib[1]= 1; // First 2 Fibonacci numbers for (int i=2; i<fib.length;i++) fib[i]=fib[i -2]+fib[i -1]; System.out.println(Arrays.toString(fib)); }