找到所有重复的值

时间:2014-10-27 14:58:50

标签: java

我正在编写代码来查找已在数组中输入的重复值。 但我无法获得正确的代码。任何人都可以建议我使用即兴代码(使用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)**

3 个答案:

答案 0 :(得分:3)

尝试这种方法:

  1. 将数组转换为List
  2. List变为Set以使每个成员获得一次。
  3. 检查Set的每位成员是否多次出现在List
  4. 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不是 1n。因此,你的循环应该是

for (int i=0; i < number.length; i++)

类似于你的第二个循环。

答案 2 :(得分:-1)

JAVA中的数组索引从0开始。您的for循环从1开始,最多为5并且不正确。因此,当您尝试访问number[5]

时,您将获得ArrayIndexOutOfBounds异常

for(int i=1;i<=number.length;i++)

它应该从0开始。

for(int i = 0; i < number.length; i++)