1

我正在学习 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

我试图搜索自己,但没有找到。请告诉我问题是什么以及如何解决。

4

5 回答 5

2

您没有覆盖类的toString方法,因此调用PointObject类方法。如果您想要对象的有意义的文本表示,请覆盖toStringtoString

public String toString(){

   return "stringYouWantToReturn";

}

在您的情况下,将此添加到Point课程中

public String toString() {
        return "Point [x=" + x + ", y=" + y + ", z=" + z + "]";
    }

当您使用println方法打印对象时,toString()会隐式调用。

于 2013-09-24T07:11:46.563 回答
1

当你写

 System.out.println(p3);

toString() 调用您传递的对象。

由于您没有在那里提供任何实现,

你必须在你的类中覆盖该toString() 方法。Point

根据 toString() 的文档

返回对象的字符串表示形式。通常,toString 方法返回一个“以文本方式表示”该对象的字符串。

所以

 user_package.Point@68e26d2e  is the textual representation of Point class.

要获得所需的输出,请toString在 Object 类的重写方法中编写逻辑并在那里返回字符串。

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();
        }
    }
于 2013-09-24T07:11:55.063 回答
1

您正在打印 class 的对象Point。如果println()方法不知道如何打印一个类,它会打印它的名称。这就是为什么你会得到这样的结果。

你可以这样做:

System.out.println(p3.x + ", " + p3.y + ", " + p3.z);

或者正如 SURESH ATTA 建议的那样,通过覆盖toString()您的Point班级的方法(或者换句话说 - 学习您的Point班级以了解当您想要打印它时如何表现)。

于 2013-09-24T07:13:47.293 回答
0

您需要覆盖类中的toString()函数或在Point类中创建用户定义的函数Point。使用toString()方法

public class Point {

public String toString()
{
//your code goes here
return "Point "+ "X : "+ x +"Y : "+ y + "Z : "+z;
}
}
于 2013-09-24T07:16:38.500 回答
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;
}
于 2013-09-24T07:22:20.620 回答