我刚开始用Java编写自己的类和方法,所以请原谅我的一些过度拥挤和不必要的代码。我应该使用以下方法编写一个名为OrderedPair的类:reflectX,reflectY,translate,rotate90,getQuadrant,getOrigPt,dilate和toString。
reflectX和reflectY方法是故意重载的,因为我的老师希望我们在程序中实现该技术。
我的问题是我的rotate90方法不起作用。例如,当我旋转点(3,-8)4次(应该返回原点)时,我得到(-8,-8)。此外,当我打印toString方法时,新点的新象限不正确。这是我的代码:
public class OrderedPair{
private double original_x;
private double original_y;
private double x_value;
private double y_value;
private int original_quadrant;
private int quadrant;
public OrderedPair (double x, double y, int q){
original_x = x;
original_y = y;
x_value = x;
y_value = y;
original_quadrant = q;
quadrant = q;
}
public void reflectX (){
y_value = -y_value;
}
public void reflectX (double value){
double reflect = value - x_value;
if (reflect > 0)
x_value += 2*reflect;
else
x_value -= 2*reflect;
}
public void reflectY (){
x_value = -x_value;
}
public void reflectY (double value){
double reflect = value - y_value;
if (reflect > 0)
y_value += 2*reflect;
else
x_value -= 2*reflect;
}
public void translate (double translateX, double translateY){
x_value += translateX;
y_value += translateY;
}
public void rotate90 (int numOfRotations){
for (int rotate = 1; rotate <= numOfRotations; rotate++){
x_value = -y_value;
y_value = x_value;
}
}
public void dilate (double dilate_value){
x_value *= dilate_value;
y_value *= dilate_value;
}
public int getQuadrant(){
if (x_value>=0)
{
if (y_value >= 0)
{
quadrant = 1;
return quadrant;
}
else
{
quadrant = 4;
return quadrant;
}
}
else
{
if (y_value >= 0)
{
quadrant = 2;
return quadrant;
}
else
{
quadrant = 3;
return quadrant;
}
}
}
public String getOrigPt(){
return "( " + original_x + ", " + original_y + ")";
}
public String toString(){
return "( " + original_x + ", " + original_y + "); " + original_quadrant + "; " + "( " + x_value + ", " + y_value + "); " + quadrant;
}
}
如果有人可以提供帮助,那就太棒了!
答案 0 :(得分:2)
在rotate90
中,for
循环体的第一行
x_value = -y_value;
会覆盖x_value
,因此第二行不再可用。
y_value = x_value; // x_value has already been changed
这有效地将y_value
设置为与其自身相反。使用临时变量,这样就不会丢失旧值。
double old_x = x_value;
x_value = -y_value;
y_value = old_x;
象限测定看起来正确,但它依赖于正确的x和y值。更正rotate90
方法还应更正getQuadrant
方法的输出。
答案 1 :(得分:2)
public void rotate90 (int numOfRotations){
for (int rotate = 1; rotate <= numOfRotations; rotate++){
x_value = -y_value;
y_value = x_value;
}
}
您使用-y_value覆盖x_value,然后设置y_value = x_value。所以你的结果是x_value = -y_value和y_value = -y_value
使用局部变量来缓存x_value:
double x_value_cache = x_value;
x_value = -y_value;
y_value = x_value_cache;