0

基本上需要扫描这个文本文件,把它放到一个数组中,但我不能放任何重复项,所以它必须检查数组,看看数组是否已经包含那个数字,我不能使用数组列表来做到这一点。

我的程序放入一个数组中放入重复项,所以我如何捕获这些重复项以做其他事情并保持我的数组没有重复项?

public static void readFromfile()throws IOException {


    int[] numbers = new int[500];
    int result, searchValue;

    int index = 0;

    // Open the file.
    File file = new File("file.txt");
    Scanner inputFile = new Scanner(file);
    int w = 0;
    for (int i=0; i<numbers.length; i++) {
        if (i==0 || numbers[i] != numbers[i-1]) {
            numbers[w++]=numbers[i];
            while(inputFile.hasNextInt() && index < numbers.length) {
                numbers[index] = inputFile.nextInt();
                Arrays.sort(numbers);
                System.out.println(numbers[index]);
                //index++;
            }

        }
    }

    // Close the file.
    inputFile.close();
    }
}
4

3 回答 3

0

如果数组已排序,则代码可以进行二进制搜索。将此与条件 if 语句结合使用应确定是否应将元素插入到数组中。请注意,如果binarySearch找不到元素,它将返回否定结果。

public static void readFromfile() throws IOException {

    int[] numbers = new int[500];
    int result, searchValue;

    int index = 0;

    // Open the file.
    File file = new File("file.txt");
    Scanner inputFile = new Scanner(file);
    int w = 0;
    for (int i = 0; i < numbers.length; i++) {
        if (i == 0 || numbers[i] != numbers[i - 1]) {
            numbers[w++] = numbers[i];
            while (inputFile.hasNextInt() && index < numbers.length) {
                int num = inputFile.nextInt();
                Arrays.sort(numbers);
                if(Arrays.binarySearch(numbers, num) < 0){
                    numbers[index] = inputFile.nextInt();
                }
                System.out.println(numbers[index]);
                // index++;
            }

        }
    }

    // Close the file.
    inputFile.close();
}
于 2013-05-15T09:42:49.263 回答
0

使用Set. 每次你从你的 TXT 文件中得到一个新号码时,你把它添加到Set这样

Set s = new Set();
int tmp;
...
while(inputFile.hasNextInt() && index < numbers.length) {
    tmp = inputFile.newtInt();
    if (!s.contains(tmp)) {
        s.add(tmp);
        numbers[index] = tmp;
        Arrays.sort(numbers);
        System.out.println(numbers[index]);
        //index++;
    }
}

您还应该考虑Arrays.sort(numbers);退出 while 循环。
除非您需要在每一步对数组进行排序。

于 2013-05-15T09:48:15.340 回答
0

将 TreeSet 用于唯一和排序列表,并在读取文件后将其转换为数组:

    Set<Integer> set = new TreeSet<Integer>();
    while (inputFile.hasNextInt()) {
        int value = inputFile.nextInt();
        if (set.contains(value)) {
            // save value to dublicate's file
        }
        set.add(value);
    }
    Integer[] numbersInteger = set.toArray(new Integer[set.size()]);

结果numbersInteger将准确包含已排序且唯一的元素数量。不会有空元素,您不必在读取文件之前定义数组的大小。

如果你真的需要一个数组int而不是Integer那么你必须添加这些行:

    int[] numbers = new int[numbersInteger.length];
    for (int i = 0; i < numbersInteger.length; i++) {
        numbers[i] = numbersInteger[i];
    }
于 2013-05-15T10:46:25.013 回答