我想在一个应用程序中输入一个数字,即盒子的数量,创建一个数组,然后以盒子的高度填充该数组,然后以其高度打印出该数组中的所有盒子。
public class Boxes {
static class Box {
int height;
Box(int h) {
this.height = h;
}
}
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int n = s.nextInt();
Box arr[] = new Box[n];
for (int i = 0; i < n; i++) {
int h = s.nextInt();
arr[i] = new Box(h);
}
System.out.println(Arrays.toString(arr));
}
}
当我输入 3 5 3 2 我希望它打印出5、3、2,但是它打印出一个内存地址。
答案 0 :(得分:1)
您必须在toString()
类中覆盖Box
方法:
class Box {
private final int height;
public Box(int h){
height = h;
}
@Override
public String toString(){
return Integer.toString(height);
}
}
默认实现是由Object
类(java中每个对象的基类)继承的,如下所示:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
请注意,它不是打印内存地址,而是打印
hashcode()
方法返回的哈希码的十六进制表示形式
答案 1 :(得分:0)
Arrays.toString循环数组中的每个元素,循环并为每个元素调用String.valueOf(element),并将它们附加到StringBuilder结果中。
String.valueOf(Box box)实际上会调用box.toString(),因为Box类没有重写方法toString(),所以将调用父类Object.toString(),而className @ HexString(hashCode())将被调用被退回。
您可以重写Box中的toString()方法,以返回高度的String值(将打印[5、3、2]),也可以循环并打印数组中每个Box的高度。