Как я могу удалить повторяющиеся символы в гистограмме [JAVA] - PullRequest
0 голосов
/ 13 ноября 2018
class Mclass {
        public static void main(String[] args) {

        char[] a= {'a','b','c','d','a','b','c'};
        int count = 0;

        for (int i=0; i<a.length; i++)
        {
                  for(int j=0; j<a.length; j++)
                  {
                      if ( a[j] == a[i] )
                          count += 1;
                  }
                  System.out.println(a[i]+":"+count);
                  count = 0;
        }
    }

Вывод:

a:2 b:2 c:2 d:1 a:2 b:2 c:2

Здесь я хочу остановить цикл, пока он не посчитает d = 1., но он снова печатает ту же переменную?Как я могу это сделать?

Ответы [ 3 ]

0 голосов
/ 13 ноября 2018

Если вы не хотите печатать уже напечатанный символ, вам нужно сохранить его где-то, как в Set, и печатать только тогда, когда Set не содержит символ, и после печати добавьте егона Set, поэтому в следующий раз на палатах он не будет напечатан.

Измените свой код на этот,

class Mclass {
    public static void main(String[] args) {
        Set<String> doneSet = new HashSet<String>();

        char[] a = { 'a', 'b', 'c', 'd', 'a', 'b', 'c' };
        int count = 0;

        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a.length; j++) {
                if (a[j] == a[i])
                    count += 1;
            }
            if (!doneSet.contains(String.valueOf(a[i]))) {
                System.out.println(a[i] + ":" + count);
                doneSet.add(String.valueOf(a[i]));
            }
            count = 0;
        }
    }
}

Это даст следующий вывод, как вы и предполагали,

a:2
b:2
c:2
d:1
0 голосов
/ 14 ноября 2018

Начиная с того, что вы уже сделали, сначала отсортируйте массив, затем попытайтесь сосчитать

import java.util.*;
class Mclass {
    public static void main(String[] args) {
        char[] a= {'a','b','c','d','a','b','c'};
        int count = 0;
        Arrays.sort(a);  // sort the array
        for (int i=0; i<a.length; i++)
        {
          for(int j=i; j<a.length; j++)
          {
              if ( a[j] == a[i] ){
                  count += 1;
                  continue;
              }          
              i=j-1;
              break;
          }
          System.out.println(a[i]+":"+count);
          count = 0;
        }
    }
}

выход

a:2
b:2
c:2
d:1
0 голосов
/ 13 ноября 2018

Не печатать внутри цикла

Сохраните счет и напечатайте вне цикла.

Сделайте что-то вроде этого:

public class Mclass {
    public static void main(String[] args) {

    char[] a= {'a','b','c','d','a','b','c'};
    int count = 0;
    Map<String,Integer> output = new HashMap<>();

    for (int i=0; i<a.length; i++)
    {
              for(int j=0; j<a.length; j++)
              {
                  if ( a[j] == a[i] )
                      count += 1;
              }
              output.put(Character.toString(a[i]), count);
              //System.out.println(a[i]+":"+count);
              count = 0;
    }
    System.out.println(output);
  }
}
...