Получение разных символов из строки - PullRequest
0 голосов
/ 12 апреля 2020

Я знаю, что сейчас есть более простой способ решить эту проблему. Но это то, что я пытался и не смог отладить.

Это мой код.

String str="java is a programming language";
int flag=0,k=0;
char unique[]=new char[256];
for(int i=0;i<str.length();i++){
  for(int j=i+1;j<str.length();j++){
    if(str.charAt(i)==str.charAt(j))
        flag++;
  }
  System.out.println(flag); //printing flag values
  if(flag==0){
     unique[k]=str.charAt(i);
     System.out.println(unique[k]); //printing array values
     k++;
  }
}

И это мой вывод.

Enter the sentence:
java is a programming language
0
j
5
5
9
12
13
13
15
18
19
19
20
20
23
23
25
26
26
26
27
29
29
29
30
30
31
31
31
31
31
Unique characters:
j

I хочу понять, откуда эти числовые значения печатаются. Я был уверен, что значения флага печати и массива будут давать мне одиночные числа di git. Что это за двойные числа git?

Ответы [ 3 ]

1 голос
/ 12 апреля 2020

вам просто нужно сбросить счетчик (флаг) перед добавлением к нему в следующей итерации.

flag=0;
for(int j=i+1;j<str.length();j++){
if(str.charAt(i)==str.charAt(j))
    flag++;
}
0 голосов
/ 13 апреля 2020
String str="java is a programming language";
int flag=0,k=0;
char unique[]=new char[256];
for(int i=0;i<str.length();i++){
  flag = 0;
  for(int j=i+1;j<str.length();j++){
    if(str.charAt(i)==str.charAt(j))
        flag++;
  }
  System.out.println(flag); //printing flag values
  if(flag==0){
     unique[k]=str.charAt(i);
     System.out.println(unique[k]); //printing array values
     k++;
  }
}
0 голосов
/ 12 апреля 2020

Ваш код имеет следующие проблемы:

  1. Не сбрасывает значение flag.
  2. Печать flag для каждого значения i, тогда как вы хотели печатать это только при поиске уникального символа.
  3. Вы начинаете l oop с j с i + 1, и таким образом вы не сможете сравнивать символы перед индексом, i + 1 .

Некоторые дополнительные вещи, которые вы также можете сделать:

  1. Фильтрация только непустых символов.
  2. Печать массива только до значение k.
  3. Не фиксируется размер от 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

Не стесняйтесь комментировать в случае любые сомнения / проблемы.

...