我正在编写代码来查找已在数组中输入的重复值。 但我无法获得正确的代码。任何人都可以建议我使用即兴代码(使用Arraylist)吗?
package com.Test1.java;
import java.util.Arrays;
import java.util.Scanner;
public class Test1 {
private static Scanner s;
public static void main(String[] args) {
int n;
s = new Scanner(System.in);
System.out.println("Enter the number of values you want to enter:");
n=s.nextInt();
int number[]=new int[n];
System.out.println("Enter the values:");
for(int i=1;i<=number.length;i++)
{
number[i]=s.nextInt();
}
System.out.println(“The Values Entered Are:”);
Arrays.sort(number);
for(int j=1;j<=number.length;j++)
{
if(number[j]==number[j-1])
{
System.out.println("The dupliclate number is"+number[j]);
}
}
}
}
我收到此错误输出:
How many values you want to Enter:
5
Enter the values:
1
2
2
3
4
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at com.Test1.java.Test1.main(Test1.java:17)**
答案 0 :(得分:3)
尝试这种方法:
List
。List
变为Set
以使每个成员获得一次。Set
的每位成员是否多次出现在List
。Java代码:
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class SOPlayground {
public static void main(String[] args) throws Exception {
Integer numbers[] = new Integer[]{1, 3, 4, 6, 7, 9, 0, 9, 8, 6, 5, 4, 3, 2, 1};
List<Integer> a = Arrays.asList(numbers);
Set<Integer> s = new HashSet(a);
for (Integer i : s) {
if (Collections.frequency(a, i) > 1) {
System.out.println(i + " is a duplicate");
}
}
}
}
输出:
1 is a duplicate
3 is a duplicate
4 is a duplicate
6 is a duplicate
9 is a duplicate
答案 1 :(得分:0)
这个答案(故意)没有提供使用ArrayLists的完整替代解决方案,而是试图解释基于数组的代码有什么问题,所以你可以自己修复它。问题出在这里:
for(int i=1;i<=number.length;i++)
{
number[i]=s.nextInt();
}
在Java(和大多数其他语言)中,长度为n
的数组的第一个索引为0
,最后一个索引为n-1
,不是 1
和n
。因此,你的循环应该是
for (int i=0; i < number.length; i++)
类似于你的第二个循环。
答案 2 :(得分:-1)
JAVA中的数组索引从0开始。您的for循环从1开始,最多为5并且不正确。因此,当您尝试访问number[5]
for(int i=1;i<=number.length;i++)
它应该从0开始。
for(int i = 0; i < number.length; i++)