2011-03-19 67 views
0

嗨, 对的,我有50个随机整数数组,我要检查其中是否是相同的, 这里是我的代码,到目前为止它只检查ajacent指数法检查重复整数一个维数组的Java

for (int i =0; i < 50; i++) 
{ 
    System.out.print("Student" + i + ": " ); 

    customers[i] = (int)((Math.random()*10000)%10+1); 
    System.out.print(" " +customers[i]+ "\n"); 



    if(duplicate == customers[i]) 
    { 
     System.out.println("yup"); 
    } 
    duplicate = customers[i]; 
} 
+0

你有CUS tom值介于1和10之间,以及50个这样的值,并且您想要检查50个值中的任何值是否重复?有没有听说过[鸽子洞原理?](http://en.wikipedia.org/wiki/Pigeonhole_principle) – aioobe 2011-03-19 23:11:01

回答

2

首先对数组进行排序。然后你可以检查下一个索引。如果它永远都是一样的,那就休息一下。


好吧,我讨厌荒谬的限制。如果你愿意,你可以这样做,而不使用排序:

import java.util.ArrayList; 
import java.lang.Math; 

public class Main { 
    public static void main(String[] args) { 
     ArrayList<Integer> list = new ArrayList<Integer>(); 
     Integer currentValue = 0; 

     int i = 0; 
     int limit = 20; 

     for(i = 0; i < limit; i++) { 
      list.add((int)(Math.random() * 100));    
     }  

     for(i = 0; i < limit; i++) { 
      currentValue = list.get(i); 
      list.set(i, -1); 
      if(list.contains(currentValue)) { 
       System.out.println("yup:" + currentValue); 
       return; 
      } else { 
       list.set(i, currentValue); 
      } 
     } 

     System.out.println("No duplicates!"); 
     return; 
    } 
} 

它是否有效? No.

它工作吗?是。

+0

抱歉忘了提及我不允许使用排序,只是一个如果,即时难倒,我假设不知所措必须使用另一个数组? – Andrew 2011-03-19 22:33:57

+0

@Andrew这样的限制让它听起来像是作业。我把它标记为这样,如果我错了,你可以改回它。 – unholysampler 2011-03-19 22:35:51

+0

ha它是功课,但我错过了提交时间现在它只是为我自己 – Andrew 2011-03-19 22:37:34

0

您使用值0-10,所以你可以在布尔阵列保存的价值和它的方式验证是否是重复与否:

boolean[] checker = new boolean[11];   
for (int i =0; i < 50; i++) { 
    customers[i] = (int)((Math.random()*10000)%10+1); 
    if (checker[customers[i]]) { 
     System.out.println("yup"); //duplication 
    } else { 
     checker[customers[i]] = true; 
    } 
} 
1

我认为,如果你只使用IF /对功能,你必须做出两个循环:

for (int i =0; i < 50; i++) 
{ 
    customers[i] = (int)((Math.random()*10000)%10+1); 

    for (int j = 0; j < i; j++) 
    { 
     if(customers[j] == customers[i]) 
     { 
      // duplicated entry. do what you want 
      System.out.println("yup"); 
     } 
    } 
} 
+0

不应该是'j Ishtar 2011-03-19 22:49:23

+1

你先生是一个性感的家伙非常感谢你 – Andrew 2011-03-19 22:52:28

+0

@Ishtar:绝对正确!我的错!编辑。 – guillaumepotier 2011-03-19 23:00:46

-1

如果您正在使用整数数组工作,就可以使用下面的代码:

public class DuplicateInteger { 

    private static int countDuplicate; 

    public static int[] getDuplicateIntegers(int[] integerArray){ 
     int duplicateIntegers[] = new int[integerArray.length]; 
     countDuplicate = 0; 
     for(int i=0;i<integerArray.length;i++){ 
      for(int j=i+1;j<integerArray.length;j++){ 
       int replicaTest = 0; 
       if(integerArray[i]==integerArray[j]){ 
        for(int k=0;k<countDuplicate;k++){ 
         if(duplicateIntegers[k]==integerArray[i]){ 
          replicaTest = 1; 
         } 
        } 
        if(replicaTest==0){ 
         duplicateIntegers[countDuplicate] = integerArray[i]; 
         countDuplicate++; 
        } 
       } 
      } 
     } 
     return duplicateIntegers; 
    } 

    public static void printDuplicateIntegers(int[] duplicateIntegers){ 
     System.out.println("Duplicate Integers:"); 
     System.out.println("-------------------"); 
     for(int i=0;i<countDuplicate;i++){ 
      System.out.println(duplicateIntegers[i]); 
     } 
    } 

    public static void main(String[] args){ 
     int numberArray[] = {1, 2, 3, 4, 5, 6, 7, 1, 3, 5, 7}; 
     printDuplicateIntegers(getDuplicateIntegers(numberArray)); 
    } 

} 
+0

该算法的性能是O(n^3),这不是很好。有关更优雅/高效的解决方案的更多信息,请参阅此问题:http://stackoverflow.com/questions/3951547/java-array-finding-duplicates – NathanChristie 2012-06-01 18:49:36