我正在尝试创建一个程序,该程序将搜索文件数组并将唯一的文件名存储到新的文件数组中并返回该新数组,仅将重复项放入一次(如果有的话)。我的代码运行完毕,但没有将值存储到我创建的新文件数组中,该文件数组没有设置长度。当我调用它时它只返回一个空数组。我设置它的方式是检查是否有任何重复项,如果有,则存储重复项一次,如果没有,则仅存储值并继续。问题是,一旦运行完 for 循环,它就不会存储这些值。有没有更好的方法在文件数组中存储值?
这是我的方法uniqueFile
,它从我的测试器 block 接收文件数组。
public static File[] getUnique(File[] files) {
int count = 0, place = 0;
File[] newFile = new File[] {};
for (int i = 0; i < files.length; i++) {
count = 0;
for (int x = 1; x < files.length; x++) {
if (files[i].equals(files[x]))
count++;
}
try {
if (count >= 1)
newFile[place] = files[i];
else
newFile[place] = files[i];
} catch (Exception e) {
}
place++;
}
return newFile;
}
这是我的测试 block :
{
File Freckle = new File("Freckle");
File Pickle = new File("Pickle");
File Sam = new File("Sam");
File Cat = new File("Cat");
File[] files = new File[] { Freckle, Pickle, Freckle, Sam, Cat,
Pickle };
File[] output = ArrayExercises.getUnique(files);
System.out.println(Arrays.toString(output));
}
我输入通用文件名来测试它是否有效。最终我将合并实际文件,但我想在继续之前先找出这个错误。
最佳答案
你让事情变得非常困难。让 Java 为您完成所有工作。尝试使用 LinkedHashSet,因为它为您提供唯一性,并且保留插入顺序。它也比将每个值与其他值进行比较更有效。
File [] input = {Freckle, Pickle, Freckle, Sam, Cat, Pickle};
Set<File> tmp = new LinkedHashSet<File>();
for (File each : input) {
tmp.add(each);
}
File [] unique = new File[tmp.size()];
int i = 0;
for (File each : tmp) {
unique[i++] = each;
}
System.out.println(Arrays.toString(unique));
关于java - 如何将文件数组值存储到另一个文件数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14973658/