我试图在数组中找到所有出现的元素,并返回一个新数组,其中删除了所有数组,并调整了数组的大小差异。例如,我想从数组{1,2,3,4,4,4}中删除所有出现的4,只返回{1,2,3}。
这是我编写的代码
public static int[] removeElement(int[] array, int element) {
int j = 0;
int k = 0;
for (int i =0;i<array.length;i++){
if (array[i]==element){
j++;
}
}
int[] newArray = new int[array.length-j];
for (int i =0;i<array.length-j;i++){
if(array[i]!=element){
newArray[k]=array[i];
k++;
}
}
return newArray;
}
然而,我得到一个非常奇怪的输出
[I@3a0b2771
有人能指出我在哪里出错了吗?
答案 0 :(得分:1)
您看到的是数组身份而不是其内容。当您尝试打印不覆盖toString()
方法的内容时,这是默认输出。来自文档:
类Object的toString方法返回一个字符串,该字符串由对象为实例的类的名称,符号字符“@&#39;”以及哈希代码的无符号十六进制表示形式组成。宾语。换句话说,此方法返回一个等于值的字符串:
getClass().getName() + '@' + Integer.toHexString(hashCode())
在您的情况下[I
表示它是一个int数组。
有几种方法可以按照您的意图打印数组元素:
使用Arrays.toString()
:打印简单数组时使用此选项。在你的情况下,它将是这样的:
System.out.println(Arrays.toString(newArray));
使用Arrays.deepToString()
:打印阵列数组时应使用此功能。
如果您需要使用数组,则应检查Arrays class documentation。它包含许多可能有用的操作数组的方法。
答案 1 :(得分:1)
您正在将代码直接打印到代码中的其他位置。在for循环中打印每个元素,然后迭代整个新数组以查看更改。
for(int i=0;i<newArray.length;i++) {
System.out.println(newArray[i]);
}
在数组上使用[i]
表示法将访问此索引处保留的元素,在本例中为第i个整数。