2014-10-27 182 views
-4

我正在编写代码以查找已输入到数组中的重复值。 但我无法获得正确的代码。任何人都可以用简易代码给我推荐这个(使用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

你是不是故意使用'ArrayList'? – Kon 2014-10-27 14:59:46

+3

数组在Java中被索引为0。所以,而不是从1迭代到array.lenth,你必须从0迭代到array.length-1 – Julien 2014-10-27 15:01:40

+0

可能的重复http://stackoverflow.com/questions/17967114/how-to-remove-duplicates-from-an- array-in-java – Chiseled 2014-10-27 15:06:29

回答

3

试试这个办法:

  1. 打开阵列到List
  2. List变成Set以获得每个成员一次。
  3. 检查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

+1使用'Collections.frequency(a,i)' – kai 2014-10-27 15:09:00

+0

可以使用扫描仪输入数组的值...? – 2014-10-27 15:57:15

+0

是的,那是可能的。您是否尝试使用'Scanner'来建立'Integer []'? – 2014-10-28 07:41:39

0

这个答案(故意)不提供使用的ArrayList一个完整的替代解决方案,而是试图解释什么是错了你的基于阵列的代码,所以你可以自己修复它。问题就在这里:

for(int i=1;i<=number.length;i++) 
{ 
    number[i]=s.nextInt(); 
} 

在Java(和大多数其他语言)长度n的数组的第一个指标是0,最后指数是n-11n。因此,你的循环应该是

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

和你的第二个循环类似。

+1

它不是我的downvote,但是如果他像这样改变forloop,他会在这一行中得到相同的错误:'number [j-1]' – kai 2014-10-27 15:06:03

+0

我认为这对他很清楚,重复的数字是彼此相邻的,这就是为什么他使用'Arrays.sort(number);' – kai 2014-10-27 15:10:11

+0

任何人都可以用临时代码来提示我,我想使用数组列表来获得输入。 – 2014-10-27 15:10:11

-1

JAVA中的数组索引从0开始。您的for循环从1开始并上升到5并且不正确。因此,你得到的ArrayIndexOutOfBounds异常,当您尝试访问number[5]

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

应该开始从0

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

+0

这是一个合理的答案,可以解释OP为什么获取ArrayIndexOutOfBounds。为什么downvote? – harun 2014-10-27 15:06:12