Java Break语句总是被执行
这可能是一个愚蠢的问题,但我们是初学者,我没有找到我的问题的答案,所以这里是:我们正在开发一个小型的文件系统,我们有一种方法,可以将文件从一个目录移动到另一个目录。从一个文件或目录中删除文件或目录,然后添加到另一个 我们使用ArrayList来存储项,然后项是目录和文件的超类 由于所有内容都必须按字母顺序排序,所以move方法包含一个while循环,用于验证项目必须放置在何处。没有对目录或文件的首选项,但出于某种原因,我插入的break语句总是被执行,或者至少我认为这就是原因。谢谢 代码如下:Java Break语句总是被执行,java,Java,这可能是一个愚蠢的问题,但我们是初学者,我没有找到我的问题的答案,所以这里是:我们正在开发一个小型的文件系统,我们有一种方法,可以将文件从一个目录移动到另一个目录。从一个文件或目录中删除文件或目录,然后添加到另一个 我们使用ArrayList来存储项,然后项是目录和文件的超类 由于所有内容都必须按字母顺序排序,所以move方法包含一个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();
}
如果有些事情不清楚,我已经原谅自己了
另外,由于某些原因,我想添加的项目总是添加两次
根据要求,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;
}
您的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;
如果您使用Java 8:
List<Item> items = ...;
items.sort((a, b) -> a.getName().compareTo(b.getName()));
所有的工具都存在于Java库中,请使用它们,而不是一次又一次地重新实现它们。您能提供代码来检查Alphabetic方法吗?是的,我知道它们存在,很抱歉,我忘了提及。这是我们编程类的一个赋值,我们被明确告知不要使用compareTo函数。。。这就是为什么我们必须重新实施它。但是我明白你在while循环中的意思。。。所以这肯定会改变。我现在就试着把它调整好。谢谢
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());
}
}
List<Item> items = ...;
items.sort((a, b) -> a.getName().compareTo(b.getName()));