我正在学习java并尝试执行一个简单的脚本。我有一个课程Point
如下:
package user_package;
public class Point {
float x;
float y;
float z;
public Point(float x, float y, float z){
this.x = x;
this.y = y;
this.z = z;
}
public static Point add(Point p1, Point p2){
return new Point(p1.x + p2.x, p1.y + p2.y, p1.z + p2.z);
}
}
然后我有这样的主文件:
import user_package.Point;
import static user_package.Point.add;
class Tutorial{
public static void main(String[] args){
float x1 = 1, y1 = 1, z1 = 1;
float x2 = 2, y2 = 2, z2 = 2;
Point p1 = new Point(x1, y1, z1);
Point p2 = new Point(x2, y2, z2);
Point p3 = add(p1, p2);
System.out.println(p3);
}
}
我在Netbeans中这样做。它没有给我任何错误,构建成功,但输出是:
user_package.Point@68e26d2e
我试图搜索自己,但没有找到。请告诉我问题是什么以及如何解决。
答案 0 :(得分:2)
您尚未覆盖toString
类的Point
方法,因此调用了Object
类toString
方法。 如果您想要对对象进行有意义的文字表示,请覆盖toString
public String toString(){
return "stringYouWantToReturn";
}
在您的情况下,将其添加到Point
类
public String toString() {
return "Point [x=" + x + ", y=" + y + ", z=" + z + "]";
}
使用println
方法打印对象时,会隐式调用toString()
。
答案 1 :(得分:1)
写作时
System.out.println(p3);
对您传递的对象进行toString()
次调用。
由于你没有提供任何实现,
您必须在toString()
课程中使用Point
方法。
返回对象的字符串表示形式。通常,toString方法返回一个“文本表示”此对象的字符串。
所以
user_package.Point@68e26d2e is the textual representation of Point class.
要获取所需的输出,请在Object类中的重写toString
方法中编写逻辑并在那里返回字符串。
package user_package;
public class Point {
float x;
float y;
float z;
public Point(float x, float y, float z){
this.x = x;
this.y = y;
this.z = z;
}
public static Point add(Point p1, Point p2){
return new Point(p1.x + p2.x, p1.y + p2.y, p1.z + p2.z);
}
@Override
public String toString() {
StringBuilder result = new StringBuilder();
result.append(this.x).append(",");
result.append(this.y).append(",");
result.append(this.z)
return result.toString();
}
}
答案 2 :(得分:1)
您正在打印班级Point
的对象。如果println()
方法不知道如何打印类,则会打印其名称。这就是你得到这样结果的原因。
你可以这样做:
System.out.println(p3.x + ", " + p3.y + ", " + p3.z);
或者正如SURESH ATTA建议的那样,通过覆盖toString()
课程的Point
方法(换句话说 - 学习你的Point
课程,了解当你想要打印它时的行为方式)。
答案 3 :(得分:0)
您需要覆盖toString()
类中的Point
函数或在Point
类中创建用户定义的函数。
使用toString()
方法
public class Point {
public String toString()
{
//your code goes here
return "Point "+ "X : "+ x +"Y : "+ y + "Z : "+z;
}
}
答案 4 :(得分:0)
由于之前的答案已经含蓄地说明了
System.out.println(p3);
实际上是
System.out.println(p3.toString());
因为您没有为toString()
方法提供自己的实现。调用Object的默认实现。这导致您的给定输出。要更改该行为,您必须覆盖toString()
@Override
public String toString() {
return "Point: x=" + x + ", y=" + y + ", z=" + z;
}