我在Java中创建了一个Line类,我还有一个绘图类,其中有一个方法将该Line绘制到屏幕上;当我调用该方法时,它也会使Line居中,一旦方法完成,它就会编辑原始Line的值。
我想到的一个非理想的解决方案是将Line去中心以改变它的价值,但是我有更多的东西,而不仅仅是这个项目中的Line和绘图类,我想知道一个方法来避免这个问题。在C ++中,我知道您可以通过地址或指针发送参数,据我所知,您不能在Java中执行此操作,但如果有类似的内容,则可能是最好的解决方案。
这是在屏幕上绘制Line的方法的代码。
public void drawLine(Line ln) {
//I have used a new variable to try to avoid the problem, but it doesn't work.
Line buf = new Line();
buf.begin = ln.begin;
buf.end = ln.end;
buf.begin = centerPoint(buf.begin);
buf.end = centerPoint(buf.end);
gfx.drawLine((int) buf.begin.x, (int) buf.begin.y, (int) buf.end.x, (int) buf.end.y);
}
以下是我使用Line的方式
Line ln = new Line(0, 0, 100, 0);
draw.drawLine(ln);
System.out.println(ln.begin.x + ", " + ln.end.x);
//It should print 0, 0, but instead it prints out a different number, because it has been centered.
感谢您的帮助。
答案 0 :(得分:3)
您的问题似乎是ln.begin
和ln.end
实例的状态已被centerPoint
方法更改。
如果buf.begin
和buf.end
是这些实例的副本而不是引用它们,则可以避免这种情况。
public void drawLine(Line ln) {
Line buf = new Line();
buf.begin = new Point(ln.begin); // I'm guessing the class name and available constructor
buf.end = new Point(ln.end); // I'm guessing the class name and available constructor
buf.begin = centerPoint(buf.begin);
buf.end = centerPoint(buf.end);
gfx.drawLine((int) buf.begin.x, (int) buf.begin.y, (int) buf.end.x, (int) buf.end.y);
}