我目前正在尝试检测并打印出用于大学作业的Java中ArrayList的大小。这就是我到目前为止所做的:
ArrayList的方法
public Dog[] obtainAllDogs() {
Dog[] result = new Dog[dogs.size()];
result = dogs.toArray(result);
return result;
}
设置狗窝容量的方法(从控制台运行)
private void setKennelCapacity() {
Dog[] currentKennelCapacity = kennel.obtainAllDogs();
for (Dog d: currentKennelCapacity){
}
System.out.println("The current kennel holds " + currentKennelCapacity + ", if you wish to increase it please enter a number below.");
System.out.print("Enter max number of dogs: ");
int max = scan.nextInt();
scan.nextLine();
kennel.setCapacity(max);
}
它有点笨拙,但它现在完成了这项工作,有趣的是它在通过控制台时打印出来:
The current kennel holds [LDog;@55f96302, if you wish to increase it please enter a number below.
它正在接收某些东西但不完全是我想要的东西。目前狗窝的大小设置为20,因此显然应该打印出20而不是[LDog; @ 55f96302。
有人可以向我解释这个错误吗?
如果我用“d”替换currentKennelCapacity(来自for each循环),它会打印出来自狗窝的所有数据,而不仅仅是整数20。
以下是当前的犬舍信息(如果有用):
DogsRUs
20
1
Dinky
1
James Bond
007007
false
1
Gold fingers
如果可能的话,我更愿意帮助我理解而不仅仅是一个直接的解决方案,帮助我学习:)
谢谢!
答案 0 :(得分:4)
currentKennelCapacity
是一个数组。如果您想打印它可以容纳多少元素,您应该使用currentKennelCapacity.length
:
System.out.println("The current kennel holds " + currentKennelCapacity.length + ", if you wish to increase it please enter a number below.");
注意这对于应该引用数组的变量来说不是一个好名字,因为它看起来应该是一个数字。
答案 1 :(得分:2)
您所做的是打印数组本身,而不是数组的大小。在Java中,数组也是对象,但它们不会覆盖Object
's toString
method,Arrays.toString
负责[LDog;@55f96302
输出。
[T]他的方法返回一个等于值的字符串:
getClass().getName() + '@' + Integer.toHexString(hashCode())
所有数组都有一个length
属性,您可以使用。
System.out.println("The current kennel holds " + currentKennelCapacity.length
+ ", if you wish to increase it please enter a number below.");
令人困惑的是你选择变量名currentKennelCapacity
,这样名称就会描述除了它之外的其他东西。我会将它命名为更准确的内容,例如currentKennel
。这可能会让您自己混淆打印变量时要打印的内容。
另外,如果要打印数组内容,可以使用{{3}}。
System.our.println(Arrays.toString(currentKennel));
答案 2 :(得分:1)
使用[] .length
System.out.println("The current kennel holds " + currentKennelCapacity + ", if you wish to increase it please enter a number below.");
要
System.out.println("The current kennel holds " + currentKennelCapacity.length + ", if you wish to increase it please enter a number below.");
答案 3 :(得分:0)
您正在尝试打印出无法转换为字符串的Dog数组,这就是您看到这些数字的原因。这是数组的哈希码。
您可以通过其长度属性找到数组的大小,如下所示:
System.out.println("The current kennel holds " +
currentKennelCapacity.length
+ ", if you wish to increase it please enter a number below.");
答案 4 :(得分:0)
首先,您的print语句不在每个循环中。
其次,您可以尝试研究重载toString()
方法。这将有助于您了解为什么不能按照您想要的方式打印阵列。最后,正如其他人已经提到的那样,您需要使用array.length
来获得数组的大小。