打印内存地址而不是 java 中的数据
printing memory address instead of data in java
所以我正在尝试设置一个包含 x y 坐标的数组。
该程序似乎可以工作,但我的打印结果是内存地址。
这是我的代码:
static class Point{
int x;
int y;
@Override
public String toString() {
return x + " " + y;
}
}
public static Object thePoints( int x, int y){
Point[] mypoints = new Point[10];
for (int i = 0; i < mypoints.length; i++){
mypoints[i] = new Point();
}
mypoints[0].x = 200;
mypoints[0].y = 200;
return mypoints;
}
public static void main(String args[]) {
Object thing = thePoints(0,0);
System.out.print(thing);
}
}
感谢输入。
您正在 main()
方法中打印出类型为 Point[]
的数组,这与显示的相反。解决此问题的快速方法是使用 Arrays.toString()
。尝试将 main()
方法中的代码更改为:
public static void main(String args[]){
Object thing = thePoints(0,0);
System.out.print(Arrays.toString((Point[])thing));
}
如果您还将 Point.toString()
重构为以下内容,那么您会得到一些相当漂亮的输出:
static class Point{
int x, y;
@Override
public String toString() {
return "(" + x + ", " + y + ")"; // print out a formatted ordered pair
}
}
输出:
[(200, 200), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0)]
您直接打印 'Object thing'。 System.out.print() 仅适用于字符串和原始数据类型,因此如果您想打印有关 'Object thing' 的信息,则必须使用为 class [= 声明的 toString() 方法15=]。
System.out.println(thing[0].toString());
您正在尝试打印点对象数组,这就是它打印出内存地址的原因。您可以使用 ArrayList 而不是数组。打印数组列表将调用每个元素的 toString 方法,在您的情况下是 Point Class.
的 toString 方法
所以我正在尝试设置一个包含 x y 坐标的数组。 该程序似乎可以工作,但我的打印结果是内存地址。 这是我的代码:
static class Point{
int x;
int y;
@Override
public String toString() {
return x + " " + y;
}
}
public static Object thePoints( int x, int y){
Point[] mypoints = new Point[10];
for (int i = 0; i < mypoints.length; i++){
mypoints[i] = new Point();
}
mypoints[0].x = 200;
mypoints[0].y = 200;
return mypoints;
}
public static void main(String args[]) {
Object thing = thePoints(0,0);
System.out.print(thing);
}
}
感谢输入。
您正在 main()
方法中打印出类型为 Point[]
的数组,这与显示的相反。解决此问题的快速方法是使用 Arrays.toString()
。尝试将 main()
方法中的代码更改为:
public static void main(String args[]){
Object thing = thePoints(0,0);
System.out.print(Arrays.toString((Point[])thing));
}
如果您还将 Point.toString()
重构为以下内容,那么您会得到一些相当漂亮的输出:
static class Point{
int x, y;
@Override
public String toString() {
return "(" + x + ", " + y + ")"; // print out a formatted ordered pair
}
}
输出:
[(200, 200), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0)]
您直接打印 'Object thing'。 System.out.print() 仅适用于字符串和原始数据类型,因此如果您想打印有关 'Object thing' 的信息,则必须使用为 class [= 声明的 toString() 方法15=]。
System.out.println(thing[0].toString());
您正在尝试打印点对象数组,这就是它打印出内存地址的原因。您可以使用 ArrayList 而不是数组。打印数组列表将调用每个元素的 toString 方法,在您的情况下是 Point Class.
的 toString 方法