public class Vector
{
private double x;
private double y;
public Vector (double x_comp, double y_comp)
{
x= x_comp;
y= y_comp;
}
public double getX ()
{
}
public double getY ()
{
}
public double magnitude ()
{
}
public double dotProduct (Vector vec)
{
}
public Vector addVectors (Vector vec)
{
// return new Vector (add parameters);
}
public Vector unitVector ()
{
// return new Vector (add parameters);
}
public double angleBetween (Vector vec)
{
}
public String formatAsString ()
{
}
public static void main(String[]args){
Vector v1 = new Vector (-3, 2);
}
}
我正在构建一个处理向量的程序。但是,对于前两种方法,我想知道如何显示Vector对象的x坐标和y坐标。反正我是否使用这些方法来显示我创建的Vector对象的坐标?
答案 0 :(得分:3)
在Java中,所有类都隐式扩展Object
类型。 Object
类指定方法toString()
。此方法旨在输出表示类的有意义的 String
。这可以在子类中重写。
@Override
public String toString()
{
return "Meaningful String";
}
在您的示例中,它可以是:
public String toString()
{
return "X: " + x + ", Y: " + y;
}
注意 :对于包含大量参数的对象,最好使用StringBuilder
。这提供了String
的可变版本,因此您不需要连接多个值并创建多个String
类型的实例。
例如,如果你有一个更复杂的Vector,它描述了一个与时间有关的三维运动,那么你可能有x
,y
,z
和{{1 }}。在这种情况下,看起来像以下内容的t
将更有效:
toString()
这可以通过调用类似的东西来调用。
public String toString()
{
StringBuilder builder = new StringBuilder();
builder.append("X: ");
builder.append(x);
builder.append("Y: ");
builder.append(y);
builder.append("Z: ");
builder.append(z);
builder.append("T: ");
builder.append(t);
return builder.toString();
}
答案 1 :(得分:1)
显示值是用户界面的一部分。 Vector
的实际实现是应用程序逻辑的一部分。这些区别既适用于简单程序,也适用于非常复杂的应用程序。
通常,将UI与应用程序逻辑/实现分开是有益的。在你的情况下,所有这些真正转化为你只是想在更高的层次上做到这一点。所以:
实施getter以返回正确的值。
在您的应用程序中,只需要一个简单的System.out.println("The X coord is " + myVector.getX())
即可。
如果不直接向Vector
添加打印输出代码,您现在可以自由地以任何格式显示(或不显示)值。
您也可以覆盖toString()
,但通常这只是为了调试(可能是您的目标),而不是有意义的格式化。这里的其他答案很好地描述了该选项(例如christopher's answer)。然后你可以简单地System.out.println(myVector)
。
请注意,上述概念仍然适用于toString()
:您仍然在更高级别打印,而不是从Vector
本身打印,这是此处的回家点。
答案 2 :(得分:0)
覆盖toString方法并打印x和y
@Override
public String toString() {
return "x value is "+ x ", y value is " + y;
}