Ваш код имеет следующие проблемы:
- Не сбрасывает значение
flag
. - Печать
flag
для каждого значения i
, тогда как вы хотели печатать это только при поиске уникального символа. - Вы начинаете l oop с
j
с i + 1
, и таким образом вы не сможете сравнивать символы перед индексом, i + 1
.
Некоторые дополнительные вещи, которые вы также можете сделать:
- Фильтрация только непустых символов.
- Печать массива только до значение
k
. - Не фиксируется размер от
unique[]
до 256
. Если все символы в str
уникальны, требуемый размер unique[]
будет равен длине str
. Таким образом, максимальный требуемый размер unique[]
равен str.length()
. Однако всегда лучше использовать List
, если размер должен быть динамическим c.
Сохраняйте и печатайте уникальные символы следующим образом:
public class Main {
public static void main(String[] args) {
String str = "java is a programming language";
int flag, k = 0;
char unique[] = new char[str.length()];// This array can have a maximum length equal to the length of str
for (int i = 0; i < str.length(); i++) {
flag = 0;
for (int j = 0; j < str.length(); j++) {
if (i != j && str.charAt(i) == str.charAt(j)) {
flag++;
}
}
if (flag == 0 && !String.valueOf(str.charAt(i)).isBlank()) {
unique[k] = str.charAt(i);
k++;
}
}
System.out.print("Unique characters: ");
for (int i = 0; i <= k; i++) {
System.out.print(unique[i] + (i < k - 1 ? "," : "\n"));
}
}
}
Выход:
Unique characters: j,v,s,p,o,l,u,e
Не стесняйтесь комментировать в случае любые сомнения / проблемы.