Basicaly需要扫描这个文本文件把它放到一个数组但我不能放任何重复,所以它必须检查数组,看看数组是否已经包含该数字,我不能使用数组列表来做到这一点。 />
我的程序输入一个数组,把它放到重复项,所以我如何捕获那些重复项来做其他事情并保持我的数组没有重复?
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();
}
}
答案 0 :(得分: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();
}
答案 1 :(得分: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循环
除非您需要在每一步对数组进行排序。
答案 2 :(得分: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];
}