有人能告诉我 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)
也可以!
这是我的代码。我想做的是识别字符串数组中的每个唯一字母,并将唯一字母保存在字符数组中。我尝试了以下代码,但 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)
也可以!