我有一个String数组,我想看看此数组中有多少个不同的字符串。表示有多少个字符串,不计算重复的字符串。这是我所拥有的:

int strings = 0;
int arrayLength = x.length;

    for (int currentNum = 1; currentNum < arrayLength; currentNum++) {
        for (int i = currentNum + 1; i < arrayLength; i++) {
            if (x[currentNum].equals(x[i])) {
               break;
            } else {
              strings++;
        }
    }
    return strings;
}


但这永远不会返回正确的金额,有人可以告诉我为什么吗?

更新:

出于好奇,如果我还想检查该字符串是否向后等于其他字符串,该怎么办?然后,HashSets将不起作用。

最佳答案

您的代码有2个问题。首先,数组索引从0而不是1开始。其次,当您想跳过该行时,break带您进入strings++行。相反,您想continue外循环,以便不执行strings++行。令人讨厌的是,您不能单独使用continue,因为这适用于内部循环。您可以使用标签,如下所示:

loop:
for (int currentNum = 0; currentNum < arrayLength; currentNum++) {
    for (int i = currentNum + 1; i < arrayLength; i++) {
        if (x[currentNum].equals(x[i])) {
            continue loop;
        }
    }
    strings++;
}

07-26 04:58