我正在尝试从Java中的int []数组中删除重复的元素。在结果中声明tempArray后,我得到
java.lang.ArrayIndexOutOfBoundsException。
public static void main(String[] args) {
int[] givenArray = {1,1,2,2,3,3,4,4,5,5,6,4,4,3,3,2,2,7,7,6,5,4,3,8,9,6};
int n = givenArray.length;
Arrays.sort( givenArray );
int j = 0;
int[] tempArray = {};
for (int i = 0; i < n-1; i++) {
if (givenArray[i] != givenArray[i+1]) {
tempArray[j] = givenArray[i];
j++;
}
}
tempArray[j] = givenArray[n-1];
for (int i : tempArray) {
System.out.print(i+" ");
}
}
答案 0 :(得分:1)
您的逻辑几乎可以说是穆罕默德。只需进行2次更改。我在下面列出了它们:
正如Würgspaß所指出的那样,您需要像这样声明和实例化数组temparray[]
:int[] tempArray = new int[n];
用定义的方式,它会创建一个大小为0的空数组。作为数组的特征,不能更改数组的大小。因此,当您尝试将其插入OutOfBounds异常时。
使用通常的迭代方式在tempArray[]
循环中访问for
,i
的值范围为0
到j
({ {1}}(含)。 ==>
j
这是整体更新的代码:
for (int i = 0; i <= j; i++)
{
System.out.print(tempArray[i] + " ");
}
输出:
package removeduplicatesfromarray; import java.util.Arrays; public class Main { public static void main(String[] args) { int[] givenArray = {1,1,2,2,3,3,4,4,5,5,6,4,4,3,3,2,2,7,7,6,5,4,3,8,9,6}; int n = givenArray.length; Arrays.sort( givenArray ); int j = 0; int[] tempArray = new int[givenArray.length]; for (int i = 0; i < n-1; i++) { if (givenArray[i] != givenArray[i+1]) { tempArray[j] = givenArray[i]; j++; } } tempArray[j] = givenArray[n-1]; for (int i = 0; i <= j; i++) { System.out.print(tempArray[i] + " "); } } }
答案 1 :(得分:-1)
int[] tempArray = {};
定义一个长度为0的空数组。使用int[] tempArray = new int[n];
避免ArrayIndexOutOfBoundsException
。
答案 2 :(得分:-1)
请使用HashSet而不是创建tempArray,因为您将必须先对数组进行排序,然后再对tempArray的大小进行排序,而使用集合时,这些复杂性都不需要。
答案 3 :(得分:-1)
尝试一下
int[] givenArray = {1,1,2,2,3,3,4,4,5,5,6,4,4,3,3,2,2,7,7,6,5,4,3,8,9,6};
int n = givenArray.length;
Arrays.sort( givenArray );
int j = 0;
// int[] tempArray = {};
List tempArray = new ArrayList();
for (int i = 0; i < n-1; i++)
{
if (givenArray[i] != givenArray[i+1])
{
tempArray.add(givenArray[i]);
j++;
}
}
tempArray.add(givenArray[n-1]);
for (int i=0;i<tempArray.size(); i++)
{
System.out.print(tempArray.get(i)+" ");
}