有人能告诉我 for 循环有什么问题吗?

Can someone tell me what's wrong with the for loops?

这是我的代码。我想做的是识别字符串数组中的每个唯一字母,并将唯一字母保存在字符数组中。我尝试了以下代码,但 Eclipse 的行为很奇怪。它只会添加字符串数组中的第一个字母,并将重复的相同字母添加到 char 数组中,这不是我打算做的,代码看起来也不会实现这样的事情。

public class Minglish {   
 public static String answer(String[] words) {
    char[] letters = new char[25];
    int i = 0;
    //iterate through words to get every unique letters
    for (String word: words) {
        for (char letter: word.toCharArray()) {
            if (!(letters.toString().contains(String.valueOf(letter)))) {
                letters[i] = letter;
                i++;
            }
        }
    }
    return (letters.toString()); 
} 
}

有人可以向我解释一下这是我的 code/logic 的问题,还是我的编译器的错误?

此外,当您尝试使用

打印结果数组时
System.out.println

它只会打印出字符串的地址。

感谢您的帮助! :)

数组不会覆盖 toString,因此您只需获得输入数组的 Object#toString 表示。你可以做

return new String(letters);

letters.toString() 给出了一些奇怪的输出。在 java 中,要么必须覆盖 toString 方法以查看在使用非原始类型时想要什么,要么必须创建自己的方法来打印它们。

你可以用for循环迭代它们来打印,简单快速的解决方案:)

用于搜索..

可以有许多不同的实现来在数组中进行搜索,但如果数据很小且无序,我会使用这个。当然,这种实现可以与其他对象一起使用,其条件是使用等于方法而不是'=='。顺便说一句,对于通用列表,java 集合class,提供了排序和搜索方法

public int indexOf(char key, char[] arr) {
    // Like a linear search.. 
    for (int i = 0; i < arr.length; i++) {
        if (arr[i] == key)
            return i;
    }
    return -1; //defeault return is -1
}

我建议使用 charValue() 方法并使用它直接将字符映射到数组。如果你有所有小写英文字符,你可以简单地从小写字符的 charValue() 中减去字符 'a' 的 charValue() 并得到一个可以完美映射到数组索引的数字。

如果这样做,您实际上可以计算任何字符出现的次数(作为整数数组而不是字符数组),或者使用布尔数组。

回答我自己的问题...就像@Reimeus 所说的那样,

charArray.toString() 

只会 return 数组的内存地址,而不是它的字符串值。您可以使用

 new String(char[] array) 

获取字符数组的字符串值,或

String.valueOf(char[] array) 也可以!