基本上,这是我必须做的关于矩形的家庭作业。当我需要做简单的数学来计算顶点的x和y值时,问题就来了,例如(x-宽度/2),因为我需要在不止一种方法中使用这些值,所以为了易读性,我在类中为这个简单的数学(x1=(x-宽度/2),x2,y1,y2等)创建了新的变量。出于某种原因,在我的方法中,使用变量会产生错误的结果。当我回去再次用数学替换它们时,它起作用了。
我的问题是为什么我做的变量(在//WEIRD VARIABLES下)在包含方法中不起作用?
这是我的代码:
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)
}
}
我很好,只是一次又一次地把数学写出来,但在我的家庭作业中,他们希望我创建一个方法来检查这个矩形是否包含另一个矩形,比如
boolean contains(MyRectangle2D r){}
这意味着我需要写r.(x-(宽度/2))
tl;dr:当我打印Ln x1时,它给我0.0,但当我打印Ln x-(宽度/2)时,它给我-0.5,这是正确的。
我一直在想为什么数学会出错,但我还是迷路了。任何帮助都将不胜感激!
在声明期间,字段的赋值(如x1
、x2
、y1
和y2
)是在调用Super()
之后和构造函数中的任何其他语句之前完成的。在您的情况下,这发生在x
、y
、宽度
和高度
的赋值之前,因此x1
、x2
、y1
和y2
将为0,无论您将字段声明放在构造函数之前还是之后。
解决方案是在最后移动构造函数中的赋值。
下面的任务是在任何构造函数之前完成的。施工人员先来并不重要。首先处理所有字段声明。
// 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));
也许解决问题的办法是在承包商内部进行作业,比如:
//declare the filds outside any method
private double x1;
private double x2;
private double y1;
private double y2;
MyRectangle2D(){
//... Your normal code here
buildWeird();
}
MyRectangle2D(double X, double Y, double Width, double Height){
//... Your normal code here
buildWeird();
}
private void buildWeird(){
this.x1 = x-(width/2);
this.x2 = (x+(width/2));
this.y1 = (y-(height/2));
this.y2 = (y+(height/2));
}
问题内容: 请帮我了解负整数的二进制表示形式。 例如,我们有5。5的二进制表示是。 而且据我了解,-5的二进制表示应该像。 但是输出是。 我有2个问题: 1)为什么这里有这么多位。 2)我真正无法理解的是最后3位。看起来像。即使是+1或-1这将是或 谢谢 问题答案: 您对这些负数应该是什么样的理解是有缺陷的。Java对负数使用二进制补码,而基本规则是取正数,将所有位取反然后加1。那给你带来负面影响
为什么Java字符串被认为是不可变的?我可以说之后将name值更改为
我正在分析一个字符串值,我知道它包含一个数字。 如果它只包含数字,并且它在整数之间。MIN_VALUE和整数。MAX_VALUE我将它解析为int,同样长时间,否则我使用Bigintger。 如果它包含一个十进制值,我想将其解析为double或BigDecimal。 我可以测试字符串中的数值是否“适合”成双精度,因此可以安全地解析为双精度,或者是否需要将其保存在BigDecimal中以防止精度损失
不使用怎么可能执行二进制对数?现在我有了这个它可以工作,但我不能使用。 我能做些什么呢? 重要提示:当我执行Math.log(7)/Math.log(2)时,我得到了2.80XXXXX 所以我这样做了: 我得到了。 函数的返回必须四舍五入,例如,如果解为6.777,则返回必须为7。
我在c编程方面是个新手,我正试图弄清楚更多关于位的知识,二进制E.c.T 例如,我有三个二进制int变量m1=255或11111111;m2=255或11111111(二进制),m3=255或11111111(二进制),m4=0或00000000(二进制)。我试图把所有的主题放在一起到单一的int变量temp。类似于(11111111 11111111 1111111100000000)这里是我的
我想将二进制字符串更改为 我试图找到这个问题的答案,但没能找到。我尝试使用split()。