Arrays 在java中打印内存地址而不是数据
所以我试着设置一个数组来保存xy坐标。 该程序似乎可以运行,但我的打印结果是内存地址。 这是我的密码:Arrays 在java中打印内存地址而不是数据,arrays,memory-address,points,Arrays,Memory Address,Points,所以我试着设置一个数组来保存xy坐标。 该程序似乎可以运行,但我的打印结果是内存地址。 这是我的密码: 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
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);
}
}
静态类点{
int x;
int-y;
@凌驾
公共字符串toString(){
返回x+“”+y;
}
}
公共静态对象点(整数x,整数y){
点[]mypoints=新点[10];
对于(int i=0;i
欢迎您的意见 您正在打印
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)]
直接打印“对象对象”。System.out.print()仅适用于字符串和基本数据类型,因此如果要打印有关“Object thing”的信息,必须使用为类“Point”声明的toString()方法
System.out.println(thing[0].toString());
您正在尝试打印点对象数组,这就是它打印内存地址的原因。可以使用ArrayList而不是数组。打印数组列表将调用每个元素的toString方法,在您的情况下,该方法是Point类的toString方法。您的方法返回一个点数组;这是印刷的参考资料。您需要对它进行迭代,并为数组中的每个点调用toString()方法。既然可以返回点数组,为什么还要返回对象?@duffymo我还原了您最近的编辑,因为它更改了代码,导致原来的问题也发生了变化。对不起,我太热心了,在更改了格式后编辑了您的代码。我认为它与修复一起工作。“试试看!”蒂姆·比格莱森——是的,我在重新格式化后被迷住了。我忘了我在哪里了。错了-它适用于任何正确重写toString()的类。不用了。谢谢你的建设性批评,即使有点粗鲁:)。粗鲁?你太敏感了。我想我内心的声音读东西的方式不一样。我读它的方式就像“wrooong-u-,这就是它的实际工作方式”。这几乎起作用它告诉我:没有找到合适的方法不能将对象转换成任何东西