Java数组:在一组10个输入数中查找唯一数字RE:

时间:2014-10-11 00:31:13

标签: java arrays int

Java Arrays: Finding Unique Numbers In A Group of 10 Inputted Numbers

我有一个问题,我已经研究过Doestovsky的问题,但是从他的问题来看,我需要知道如何找到重复的部分,使其成为它自己的一个功能:

java.util.Scanner input = new java.util.Scanner(System.in);

int[] numbers = new int[10];
boolean[] usedBefore = new boolean[10];

// Insert all numbers
for (int i = 0; i < numbers.length; i++) {
    // Read number from console
    numbers[i] = input.nextInt();

    // Check if number was inserted before
    usedBefore[i] = false;
    for(int k = 0; k < i; k++) {
        if(numbers[k] == numbers[i]) {
            usedBefore[i] = true;
            break;
        }
    }
}

// Print all numbers that were not inserted before
for(int j = 0; j < numbers.length; j++) {
    if(!usedBefore[i]) {
        System.out.print(String.valueOf(numbers[j])+" ");
    }
}

我已经尝试过这部分代码并且它有效但我需要将查找重复项的部分转换为由数组提供支持的函数。

致信ThimoKl以创建此代码。

2 个答案:

答案 0 :(得分:0)

让我们尝试使用Treeset的其他内容,让我们摆脱它为

import java.util.*;

public class duplicate {

   private static TreeSet<Integer> numbers = new TreeSet<Integer>();
   private static TreeSet<Integer> duplicates = new TreeSet<Integer>();

   public static void main (String[] args) {
      Scanner input = new Scanner(System.in);
      int n=0;
      int numberOfIntToRead=10;

      for (int i = 0; i < numberOfIntToRead; i++) {
          // Read number from console
          n=input.nextInt();
          // Check if number was inserted before
          checkIfDuplicate(n);
      }

      // Print all numbers that were not inserted more than one time
      for (Integer j : numbers) {
          System.out.print(j+" ");
      }
   }


   public static void checkIfDuplicate(int n){
      if(!numbers.contains(n) && !duplicates.contains(n)){
         numbers.add(n);
      }else{
         numbers.remove(n);
         duplicates.add(n);
      }
   }

}

但是如果你真的想要使用数组而不是任何类型的Collection,那么你需要将你的数组声明为类成员,这样你就可以使用&#34; for&#34;检查函数中的重复项a给它你的i,这样你也可以把'#34; for&#34;在函数中进行打印。并给它numbers.length。这应该可以解决问题。

答案 1 :(得分:0)

您可以使用Set来轻松查找重复项:

List<Integer> dups = new ArrayList<>();
Set<Integer> set = new HashSet<>();
for (int i : numbers)
    if (!set.add(i))
        dups.add(i);

这是有效的,因为Set#add()如果在调用时没有因此而返回false,则会发生这样的情况,例如,已经已经包含数字 - 即它是一个重复。