Java 创建一个方法来搜索重复值的数组索引

Java 创建一个方法来搜索重复值的数组索引,java,arrays,methods,equals,equality,Java,Arrays,Methods,Equals,Equality,我正在尝试编写一个方法,该方法将搜索名为“items”的数组的索引,以查看同一字符串是否包含在多个索引中(忽略大小写)。如果字符串多次出现在数组中,则该方法应输出一条消息并退出。就我现在所拥有的,循环有时工作,有时不工作——例如,如果字符串“house”和“house”被存储,它将不会捕获它,尽管它应该这样做。我最初有休息;发现后=真;并认为移除它可能会有所帮助,但事实并非如此。有什么建议吗 public void equals() { boolean found = false;

我正在尝试编写一个方法,该方法将搜索名为“items”的数组的索引,以查看同一字符串是否包含在多个索引中(忽略大小写)。如果字符串多次出现在数组中,则该方法应输出一条消息并退出。就我现在所拥有的,循环有时工作,有时不工作——例如,如果字符串“house”和“house”被存储,它将不会捕获它,尽管它应该这样做。我最初有休息;发现后=真;并认为移除它可能会有所帮助,但事实并非如此。有什么建议吗

public void equals() {
    boolean found = false;
    for (int i = 0; i < items.length; i++) {
        for (int j = 1; j > i && j < items.length; j++) {
            if (items[i].equalsIgnoreCase(items[j])) {
                found = true;
            }
        }
    }
    if (found) {
        System.out.println("You listed the same item more than once.  Please restart and try again.");
        System.exit(0);
    }
}
public void等于(){
布尔值=false;
对于(int i=0;ii&&j
这是你的问题

    for (int i = 0; i < items.length; i++) {
        for (int j = 1; j > i && j < items.length; j++) {
for(int i=0;ii&&j
换成

    for (int i = 0; i < items.length; i++) {
        for (int j = i+1; j > i && j < items.length; j++) {
for(int i=0;ii&&j
推理:如果我是2,j是1,则j立即不是>1,内部循环立即返回。这显然不是您想要的,因为这意味着只对数组中的第一个字符串进行比较

当然,由于j现在总是>i,我们可以放弃支票:

    for (int i = 0; i < items.length; i++) {
        for (int j = i+1; j < items.length; j++) {
for(int i=0;i
好多了

顺便说一句,您可以通过将所有字符串添加到
哈希集
()并检查哈希集的长度与原始集合的长度之间的关系来提高算法的速度-如果哈希集的长度较低,则存在重复项。这将以O(nlog(n))而不是O(n^2)运行

您应该更改:

for (int j = 1; j > i && j < items.length; j++)

@assylias插入所有字符串的小写版本:)+1可能没有那么重要的注释,但是在第二个for中,您可以删除“j>i”以提高清晰度,因为它总是以初始化j的方式出现。
for (int j = i + 1; j < items.length; j++)
public void equals() {
    Set<String> set = new TreeSet<String> (String.CASE_INSENSITIVE_ORDER);
    set.addAll(Arrays.asList(items));
    if (set.size() != items.length) {
        System.out.println("You listed the same item more than once.  Please restart and try again.");
    }
}
public boolean hasDuplicatesIgnoreCase(String[] items) {
    ...
    return true / false;
}