有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java类:成功构建,但输出为“user\u包”。Point@68e26d2e"

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

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


共 (5) 个答案

  1. # 1 楼答案

    您尚未重写Point类的toString方法,因此调用了ObjecttoString方法如果想要对象的有意义的文本表示,请重写toString

    public String toString(){
    
       return "stringYouWantToReturn";
    
    }
    

    在您的情况下,将其添加到Point类中

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

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

  2. # 2 楼答案

    当你写作时

     System.out.println(p3);
    

    在您传递的对象上有toString()个调用

    因为你没有提供任何实现

    必须在Point类中验证toString()方法

    As per docs of toString()

    Returns a string representation of the object. In general, the toString method returns a string that "textually represents" this object.

    所以

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

    要获得所需的输出,请在对象类中的overridedtoString方法中写入逻辑,并在其中返回字符串

    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();
            }
        }
    
  3. # 3 楼答案

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

    public class Point {
    
    public String toString()
    {
    //your code goes here
    return "Point "+ "X : "+ x +"Y : "+ y + "Z : "+z;
    }
    }
    
  4. # 4 楼答案

    正如前面的回答已经暗示的那样

      System.out.println(p3);
    

    实际上是

      System.out.println(p3.toString());
    

    而且因为您没有为toString()方法提供自己的实现。调用Object的默认实现。这将导致给定的输出。为了改变这种行为,您必须重写toString()

    @Override
    public String toString() {
        return "Point: x=" + x + ", y=" + y + ", z=" + z;
    }
    
  5. # 5 楼答案

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

    您可以这样做:

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

    或者正如SURESH ATTA所建议的那样,通过为Point类重写toString()方法(或者换句话说,学习Point类以了解在打印它时如何操作)