这可能是一个愚蠢的问题,但我们是初学者,我没有找到问题的答案,所以这里是:我们正在开发一个文件系统(小型)我们有这个方法应该将文件从一个目录移动到另一个目录。 (从一个文件或目录中删除文件或目录,然后添加到另一个文件或目录。)
我们使用ArrayLists来存储Items(Item是目录和文件的超类)。
由于所有内容都必须按字母顺序排序,因此移动方法包含一个while循环以验证项目必须放置的位置(没有目录或文件的首选项)但由于某种原因我插入的break语句是总是执行(或者至少是我认为的原因。)谢谢!
以下是代码:
if(item != null){
boolean bool = false;
int i = 0;
loop: while(!bool && i <= items.size()-1) {
if(i==0) {
if(checkIfAlphabetic(item.getName(), items.get(0).getName())){ items.add(0,item);
bool = true;
}
else{
break loop;
}
}
else if(checkIfAlphabetic(items.get(i-1).getName(), item.getName()) && checkIfAlphabetic(item.getName(), items.get(i).getName() )) {
items.add(i, item);
bool = true;
}
else i++;
}
if(!bool){
items.add(item);
}
setModificationTime();
}
如果有些事情不清楚,我已经原谅了自己。
PS。另外由于某种原因,我想要添加的项目总是被添加两次。
根据要求,checkIfAlphabetic:
的代码 private boolean checkIfAlphabetic(String search, String target){
int[] searchInt = search.codePoints().toArray();
int[] targetInt = target.codePoints().toArray();
int i = 0;
while(i<search.length() && i<target.length()){
if(searchInt[i] > targetInt[i]){
return false;
}
else if(searchInt[i] < targetInt[i]) return true;
else i++;
}
if(search.length() < target.length()){
return true;
}
else return false;
}
答案 0 :(得分:0)
您的while
循环错误。无论如何,它将在第一次迭代后始终停止。
这是按陈述顺序发生的事情。这是伪代码,而不是Java。不要复制/粘贴,它将无法正常工作。
boolean bool = false;
int i = 0;
// entering the while loop:
if (!bool && i <= items.size() - 1) // returns true. We go in the while loop.
if (i == 0) // returns true, we go in that block.
if (check... ) // if this returns true, this happens:
bool = true;
else // if the previous statement returns false, this happens:
break;
所以在这里,如果检查...返回false,我们将退出循环。让我们继续在另一种情况下:
// nothing else happens inside the loop, so go back to the loop condition.
if (!bool && i <= items.size() - 1) // Hey, wait a minute, bool is true. So "not" true is false. The condition is therefore not met, let's leave the loop.
所以这就是发生的事情,在一次执行之后,无论如何,你的代码都会退出循环。在您的方案中,bool = true
几乎绝对等同于break
。
这是您需要解决的问题。
如果我必须编写代码,我就是这样做的:
List<Item> items = ... ;
java.util.Collections.sort(items, new ItemNameComparator());
private static class ItemNameComparator implements Comparator<Item> {
@Override
public int compare(Item a, Item b) {
return a.getName().compareTo(b.getName());
}
}
如果您使用Java 8:
List<Item> items = ...;
items.sort((a, b) -> a.getName().compareTo(b.getName()));
Java库中存在所有工具,使用它们而不是一次又一次地重新实现它们。