Как я могу проверить конкретный случай более одного раза? - PullRequest
0 голосов
/ 07 апреля 2019

Я начинающий кодер. Мой код предполагает, что пользователь введет слово с «*» (звездочки) и отобразит «то же самое», если символы до и после * совпадают. Например, для ввода ja '*' aisfun мой вывод должен быть «одинаковым», потому что a * находится между одинаковыми буквами. Кажется, мой код работает для большинства случаев, таких как несколько звездочек, однако, когда я пытаюсь ввести пользовательский ввод, такой как "ja '' a '' isfun", вывод будет "одинаковым", хотя он должен отображать "разные" «потому что« а »и« я »разные буквы. Я предполагаю, что мой код способен проверять только первую звезду в этом случае. Как я могу решить эту проблему? (Рассмотрим звезды без апострофов)

    String ind = "DIFFERENT";
    for (int i = 0; i< s.length(); i++) {
        if ((s.charAt(i) == '*') && (s.charAt(i-1)) == s.charAt(i+1))
            ind = "SAME";
        }
        System.out.print(ind);
    }
    System.out.print("NO");

Ответы [ 2 ]

1 голос
/ 07 апреля 2019

Во-первых, вам нужно исправить индекс цикла. Значение должно быть от 1 до s.length() - 1, в противном случае вы получите исключение индекса вне границ, если последний или первый символ равен *.

Во-вторых, кажется, что вы хотите вывести «РАЗНОЕ», если вокруг * есть хотя бы одна пара символов, которая отличается. Вы можете сделать это, break выйдя из цикла, как только вы найдете другую пару:

// be careful of bounds of the indexes    
for (int i = 1; i< s.length() - 1; i++) {
    if ((s.charAt(i) == '*')) {
            if ((s.charAt(i-1)) == s.charAt(i+1)) {
                ind = "SAME";
            } else {
                ind = "DIFFERENT";
                break;
            }
        }
    }
    System.out.print(ind);

В качестве альтернативы вы можете использовать регулярное выражение:

if (Pattern.compile("(.)\\*(?!\\1)").matcher(s).find()) {
    System.out.println("DIFFERENT");
} else {
    System.out.println("SAME");
}
1 голос
/ 07 апреля 2019

Вы должны ограничить цикл от 2-го символа до 2-го от конца и прервать, когда совпадение найдено (я полагаю):

String ind = "DIFFERENT";
for (int i = 1; i < s.length() - 1; i++) {
    if ((s.charAt(i) == '*') && (s.charAt(i-1)) == s.charAt(i+1)) {
        ind = "SAME";
        break;
    }
}
System.out.print(ind);

Также сбросить:

System.out.print("NO");
...