A voir également:
- L'objet a peut-être la valeur 'null'
- Vente objet occasion entre particulier - Guide
- Logiciel gratuit calcul valeur nutritionnelle - Télécharger - Santé & Bien-être
- Identifier un objet à partir d'une photo - Guide
- Valeur ascii - Guide
- Objet interdit en cabine ryanair - Guide
3 réponses
Bonsoir,
D'abord, vous ne pouvez pas appliquer des méthodes à un objet null. Il faut l'instancier.
Alors, if (this==null) est inutile, car la fonction ne sera pas appelé pour un objet null, le compilateur ne va pas le permettre; et même si vous y arriverez, la JVM va générer NullPointerException à l'exécution (peut être c ça ce que vous voulez dire par "ça bug")
PS:
- la fonction affiche() donne le même résultat quoi que soit la valeur de l'entrée b.
- est que l'ajout d'un attribut boolean "infini" à la classe Point ne va résoudre votre problème?
Bonne chance
Being normal is boring... being geek is interesting
D'abord, vous ne pouvez pas appliquer des méthodes à un objet null. Il faut l'instancier.
Alors, if (this==null) est inutile, car la fonction ne sera pas appelé pour un objet null, le compilateur ne va pas le permettre; et même si vous y arriverez, la JVM va générer NullPointerException à l'exécution (peut être c ça ce que vous voulez dire par "ça bug")
PS:
- la fonction affiche() donne le même résultat quoi que soit la valeur de l'entrée b.
- est que l'ajout d'un attribut boolean "infini" à la classe Point ne va résoudre votre problème?
Bonne chance
Being normal is boring... being geek is interesting
Ce que tu manipules dans tes variables ce ne sont pas directement les objets mais des références aux objets. La valeur null signifie que la variable ne référence aucun objet. Mais quand tu manipules une méthode c'est toujours avec un objet, donc sa référence existe, tu ne peux donc jamais avoir this==null
Tu peux peut être te créer des constantes static de type Point et faire une comparaison des objets avec == (et non pas equals comme d'habitude) afin de savoir si l'objet que tu référence est une de ces constantes.
Tu peux peut être te créer des constantes static de type Point et faire une comparaison des objets avec == (et non pas equals comme d'habitude) afin de savoir si l'objet que tu référence est une de ces constantes.
Un exemple rapide (avec les 8 cas d'infinis possibles).
Perso j'irais plus loin pour optimiser, mais là c'est déjà un bon point de départ...
public class Point { public static final Point INFINITE_XP = new Point(Long.MAX_VALUE, 0); public static final Point INFINITE_XP_YP = new Point(Long.MAX_VALUE, Long.MAX_VALUE); public static final Point INFINITE_XP_YN = new Point(Long.MAX_VALUE, Long.MIN_VALUE); public static final Point INFINITE_XN = new Point(Long.MIN_VALUE, 0); public static final Point INFINITE_XN_YP = new Point(Long.MIN_VALUE, Long.MAX_VALUE); public static final Point INFINITE_XN_YN = new Point(Long.MIN_VALUE, Long.MIN_VALUE); public static final Point INFINITE_YP = new Point(Long.MAX_VALUE, 0); public static final Point INFINITE_YP_XP = INFINITE_XP_YP; public static final Point INFINITE_YP_XN = INFINITE_XN_YP; public static final Point INFINITE_YN = new Point(Long.MIN_VALUE, 0); public static final Point INFINITE_YN_XP = INFINITE_XP_YN; public static final Point INFINITE_YN_XN = INFINITE_XN_YN; public static boolean isXPositiveInfinite(Point point) { return point == INFINITE_XP || point == INFINITE_XP_YP || point == INFINITE_XP_YN; } public static boolean isXNegativeInfinite(Point point) { return point == INFINITE_XN || point == INFINITE_XN_YP || point == INFINITE_XN_YN; } public static boolean isYPositiveInfinite(Point point) { return point == INFINITE_YP || point == INFINITE_YP_XP || point == INFINITE_YP_XN; } public static boolean isYNegativeInfinite(Point point) { return point == INFINITE_YN || point == INFINITE_YN_XP || point == INFINITE_YN_XN; } public static boolean isXInfinite(Point point) { return isXPositiveInfinite(point) || isXNegativeInfinite(point); } public static boolean isYInfinite(Point point) { return isYPositiveInfinite(point) || isYNegativeInfinite(point); } public static boolean isInfinite(Point point) { return isXInfinite(point) || isYInfinite(point); } public final long x; public final long y; public Point(long a, long b) { x = a; y = b; } public void affiche(boolean println) { if (println) System.out.println(this); else System.out.print(this + " "); } @Override public String toString() { if (isInfinite(this)) return "Infini"; else return String.format("(%d, %d)", x, y); } }
Perso j'irais plus loin pour optimiser, mais là c'est déjà un bon point de départ...