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

时间:2015-07-03 21:34:40

标签: java arrays char

所以这是我的代码。我想要做的是识别字符串数组中的每个唯一字母,并将唯一字母保存在字符数组中。我尝试了以下代码,但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()); 
} 
}

有人可以向我解释这是我的代码/逻辑问题,还是我编译器的错误?

此外,当您尝试使用

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

它只会打印出String的地址。

感谢您的帮助! :)

4 个答案:

答案 0 :(得分:0)

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

return new String(letters);

答案 1 :(得分:0)

letters.toString()给出了一些奇怪的输出。在java中,要么必须覆盖toString方法,以便在使用非pirimitive类型时查看所需内容,或者必须创建自己的方法来打印它们。

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

搜索..

在数组中进行搜索可以有很多不同的实现,但如果数据很小而且没有排序,我会使用这个。当然这种实现可以与其他对象一起使用,其中使用equals方法而不是' =='。顺便说一下,对于通用Lists,java Collections类提供了排序和搜索方法

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
}

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

回答我自己的问题......就像@Reimeus&#39;说,一个

charArray.toString() 

只返回数组的内存地址,而不是字符串值。你可以使用

 new String(char[] array) 

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

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

相关问题