繁体   English   中英

有人可以告诉我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()); 
} 
}

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

另外,当您尝试使用打印输出结果数组时

System.out.println

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

谢谢您的帮助! :)

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

return new String(letters);

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

您可以使用for循环来循环打印,简单而快速的解决方案:)

用于搜索..

可以有许多不同的实现方式来在数组中进行搜索,但是如果数据很小且没有顺序,我可以使用这种方式。当然,这种实现方式可以与其他对象一起使用,其行为是使用equals方法代替'=='。 顺便说一下,对于通用列表,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
}

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

如果执行此操作,则实际上可以保留任何字符的出现次数(作为一个整数数组而不是字符),或使用布尔数组。

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

charArray.toString() 

将仅返回数组的内存地址,而不是其字符串值。 您可以使用

 new String(char[] array) 

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM