如何仅打印数组中的不同字符

时间:2017-05-21 20:11:04

标签: java distinct chars

我试图只打印字符数组中的非重复(不同)字符。我可能做了一些基本错误的事情。你能解释一下我的错误吗?这是我的代码:

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);
    }
}

2 个答案:

答案 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为真。