Fondamentalement, c'était un devoir que je devais faire à propos des rectangles. Le problème est venu quand j'ai eu besoin de faire des calculs simples pour calculer les valeurs x et y des sommets, par exemple. (x-width/2), et parce que j'avais besoin d'utiliser ces valeurs dans plus d'une méthode, j'ai créé de nouvelles variables dans la classe pour cette mathématique simple (x1 = (x-width/2), x2, y1, y2 etc.), pour plus de lisibilité. Pour une raison quelconque, dans mes méthodes, l'utilisation des variables a produit des résultats erronés. quand je suis retourné et les a remplacés par les mathématiques à nouveau, cela a fonctionné.JAVA mathématique double variable ne correspond pas, est-il bc de problèmes de représentation binaire?
Ma question est pourquoi les variables que j'ai faites (sous // WEIRD VARIABLES) ne fonctionnent pas dans la méthode contains?
voici mon code:
package com.example;
public class MyRectangle2D {
double x,y;
double width, height;
//a couple of getters and setters
//constructor
MyRectangle2D(){
x=0.0;
y=0.0;
width=1.0;
height=1.0;
}
MyRectangle2D(double X, double Y, double Width, double Height){
x=X;
y=Y;
width=Width;
height=Height;
}
// WEIRD VARIABLES
private double x1 = x-(width/2);
private double x2 = (x+(width/2));
private double y1 = (y-(height/2));
private double y2 = (y+(height/2));
//methods
boolean contains(double X, double Y){
/* initially wrote:
return (!(X<x1 || X>x2 || Y <y1 || Y>y2));
didnt work, bc for some reason x1,x2,y1,y2 were all 0.0
the below works well: */
return (!(X<(x-(width/2)) || X>(x+(width/2)) || Y <(y-(height/2)) || Y>(y+(height/2))));
}
public static void main(String[] args) {
MyRectangle2D b = new MyRectangle2D(1, 2, 3, 4);
System.out.println(b.x1); // 0.0 (should be -0.5)
System.out.println(b.x); // 1.0 (correct)
System.out.println(b. width); // 3.0 (correct)
System.out.println("(1.0,2.0) in b? (true?) " + b.contains(1.0,2.0)); //true (correct)
}
}
Je suis parfaitement bien en train d'écrire les maths encore et encore, mais dans mes devoirs qu'ils voulaient que je crée une méthode pour vérifier si ce rectangle contient un autre rectangle, comme
boolean contains(MyRectangle2D r){}
qui signifie que je dois écrire r. (X- (largeur/2)) < = (X- (largeur/2)), etc. pour écrire mes conditions, ce qui semble fastidieux et en désordre. Il m'a semblé logique de créer ces variables x1, x2, y1, y2 comme une forme de raccourci, puisque les maths étaient la même formule et il serait plus propre et je pourrais directement utiliser r.x1 au lieu de r (x- (largeur/2))
tl; dr: lorsque i printlnQ x1, elle me donne 0,0, mais quand i println x- (largeur/2), elle me donne -0,5, ce qui est correct. J'ai essayé de comprendre pourquoi les maths se trompent mais je suis toujours perdu. Toute aide serait très appréciée!
qui fonctionne très bien! merci – swonlek
Vous ne pouvez pas accéder à 'this' dans une méthode statique. –