我试图只打印字符数组中的非重复(不同)字符。我可能做了一些基本错误的事情。你能解释一下我的错误吗?这是我的代码:
public class MyDistinctCharacters {
public static void printDistinctCharacters(char[] arr){
for(int i=0;i<arr.length;i++){
boolean isDistinct = false;
for(int j=0;j<i;j++){
if(arr[i] == arr[j]){
isDistinct = true;
break;
}
}
if(!isDistinct){
System.out.print(arr[i]+" ");
}
}
}
public static void main(String a[]){
char[] chars = {a,b,c,c,d,e,e,f};
MyDistinctCharacters.printDistinctCharacters(chars);
}
}
答案 0 :(得分:0)
有几件事。 首先,我不确定你是打算一次打印每个字符,还是只打印没有重复字符的字符。听起来你的意思是第二个。如果是这样,请回答:
首先,isDistinct变量应根据您的代码调用isDuplicate。 第二,在内循环中,你有一个条件j&lt;一世。因此,如果您的数组长度为10个字符且i = 0,则代码将不会检查数组是否重复,只打印i = 0的第一个字符。
要解决此问题,您需要检查整个数组是否有重复,只需确保您没有引用相同的字符i。所以内循环应该是:
for(int j=0;j<arr.length;j++){
if(i != j && arr[i] == arr[j]){
isDuplicate = true;
break;
}
}
答案 1 :(得分:0)
应在数组定义中引用字符:
char[] chars = {'a', 'b', 'c', 'c', 'd', 'e', 'e', 'f'};
我很确定它没有编写你编写它的方式。
关于内循环,我同意@ValtsBlukis。循环索引应该运行到arr.length
- 没有理由停在i
。你的逻辑在内部循环体中也是有缺陷的。如果有多个元素具有相同的值(最多isDistinct
),您基本上会说i
为真。