从数组中删除重复项并写入文本文件

时间:2013-05-14 23:41:55

标签: java arrays duplicates

Iv创建了一个数组现在我必须从数组中删除重复项并将重复项写入txt文件并将这些随机数放入更低的位置,但如果有人至少可以告诉我如何获取这些副本数组中的整数并将重复项放在已经完美的变量中。这是我的代码。谢谢!没有数组列表plz。

import java.util.Random;
import java.io.*;
import java.lang.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Arrays;
import java.util.Scanner;
public class MainProg extends GenKeys {

    public static void main(String[] args) {
        //int x = random();
        try {

            BufferedWriter out = new BufferedWriter(new FileWriter("file.txt"));


            for (int z = 0; z < 500; z++) {
                int x = random();
                out.write(x + System.getProperty("line.separator"));
            }
            out.close();

            readFromfile();
        } catch (IOException e) {
            System.out.print(e);
        }
    }

    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();
                    System.out.println(numbers[index]);
                    index++;
                }
            }
        }

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

GenKeys方法

 import java.util.Random;

public class GenKeys {

static int x;


public static int random(){
for (int i = 0; i < 250; i++) {

 x = (int) (Math.random() * 250);

}

return x;




}
}

2 个答案:

答案 0 :(得分:2)

不是将整数存储在数组中,而是将它们存储在HashSet<Integer>

替换int[] numbers = new int[500];

Set<Integer> numbers = new HashSet<Integer>();

并使用Set可用的方法替换numbers上调用的所有方法。

答案 1 :(得分:0)

好吧,首先你有一些奇怪的代码,虽然它可能有用,但它仍然很奇怪。我们首先要清理循环代码:

首先,你有太多的计数变量。我看到索引,w和i。你不需要那么多。其次,如果你看看你的这两行代码:

if (i == 0 || numbers[i] != numbers[i - 1]) {
                numbers[w++] = numbers[i];

那么我们必须问自己,if语句的第一部分的目的是什么?如果i == 0那么只有在第一次通过时才会成立,因此w也将为0.所以我们到达if的内部部分并且你设置numbers[0] = numbers[0]不需要,所以我们可以删除你的if语句的i == 0部分,因为它什么都没有。然后继续,你进入while循环并通过所有输入文件,并将所有随机数添加到数字数组。然后你回到for循环,i现在是1,但是你永远不会再次通过while循环,因为索引太大了,相反,你对你的{做了一些陌生感{1}}以及wi,在我看来,您正在设置numbers等,除非您碰巧得到两个相同的随机数字一行,在这种情况下,你开始做numbers[1] = numbers[1], numbers[2] = numbers[2]等。这一切都很奇怪,我确定不对。

所以你可能想要的东西更像是:

numbers[3] = numbers[4]

这将使用唯一的数字填充您的数字数组。 然后按照这种方式对数字进行排序。

index = 0;
while (inputFile.hasNextInt() && index < numbers.length) {   
    numbers[index] = inputFile.nextInt();
    System.out.println(numbers[index]);
    index++;
}

然后浏览并删除重复项。

Arrays.sort(numbers);

现在您可以创建一个新数组并通过仅填充正值来读取...或者只使用现有数组打印出剩余的数字。