Java Break语句总是被执行

Java Break语句总是被执行,java,Java,这可能是一个愚蠢的问题,但我们是初学者,我没有找到我的问题的答案,所以这里是:我们正在开发一个小型的文件系统,我们有一种方法,可以将文件从一个目录移动到另一个目录。从一个文件或目录中删除文件或目录,然后添加到另一个 我们使用ArrayList来存储项,然后项是目录和文件的超类 由于所有内容都必须按字母顺序排序,所以move方法包含一个while循环,用于验证项目必须放置在何处。没有对目录或文件的首选项,但出于某种原因,我插入的break语句总是被执行,或者至少我认为这就是原因。谢谢 代码如下:

这可能是一个愚蠢的问题,但我们是初学者,我没有找到我的问题的答案,所以这里是:我们正在开发一个小型的文件系统,我们有一种方法,可以将文件从一个目录移动到另一个目录。从一个文件或目录中删除文件或目录,然后添加到另一个

我们使用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()));