我的目标是创建一个唯一文件数组(没有重复项),并返回该数组。我似乎无法确定唯一的,不重复的值的正确大小。我做错了什么?
public static File[] getUniqueSet(File[] files)
{
// Find size of unique File objects array
int uniqueFileAmt = files.length;
for (int i = 0; i < files.length; i++)
{
for (int j = i + 1; j < files.length; j++)
{
if (i != j && (files[i].equals(files[j])))
uniqueFileAmt--;
}
}
File[] uniqueFiles = new File[uniqueFileAmt + 1];
int uniquePos = 0;
// Add unique files to array uniqueFiles, avoiding duplicates
for (int i = 0; i < files.length; i++)
{
for (int j = i + 1; j < files.length; j++)
{
if (i != j && (! files[i].equals(files[j])))
{
uniqueFiles[uniquePos] = files[j];
uniquePos++;
}
}
}
return uniqueFiles;
}
答案 0 :(得分:0)
仔细看看uniqueFileAmt--
。如果同一文件在数组中存在两次以上,则执行过于频繁。让我们说它出现在索引0,2和3处。它在......时执行。
您的逻辑存在一般问题。当您查看第二部分,构建新阵列时,即使是唯一的,也永远不会添加file[0]
。另一方面,代码几乎添加了所有内容,大部分时间都是多次添加,只要在当前文件之前有一个文件与它不同。
再次思考问题并尝试找到不同的解决方案。如果不做一些家庭作业,我建议你放弃普通阵列,让自己熟悉Collection classes。
答案 1 :(得分:0)
设置是唯一的唯一商品。
File[] files= f.listFiles();
System.out.println(Arrays.toString(files));
Set<File> setFiles = new HashSet<File>(Arrays.asList(files));
File[] uniqueFiles = setFiles.toArray(new File[setFiles.size()]);
System.out.println(Arrays.toString(uniqueFiles));
这就是为什么它的HashSet顺序会有所不同