Обратные строковые гласные

#java #string

#java #строка

Вопрос:

я пытался написать код для изменения гласных строки, но он не меняет символы, как должно быть, пожалуйста, проверьте это, скажите мне, что я сделал не так 🙂

 package stringQuestions;

import java.util.Scanner;

public class ReverseVowelsOfSTring {

    public static void main(String[] args) {
         Scanner sc = new Scanner(System.in);

              String S = sc.nextLine();
              int n = S.length();
              char ch[] = S.toCharArray();
              for(int i = 0; i<n; i  ) {
                 
                  if(ch[i] == 'a' || ch[i] == 'e' || ch[i] == 'i' || ch[i] == 'o' || ch[i] == 'u'
                  || ch[i] == 'A' || ch[i] == 'E' || ch[i] == 'I' || ch[i] == 'O' || ch[i] == 'U'){
                      for(int j = n-1; j>i; j--) {
                  if(ch[j] == 'a' || ch[j] == 'e' || ch[j] == 'i' || ch[j] == 'o' || ch[j] == 'u'
                  || ch[j] == 'A' || ch[j] == 'E' || ch[j] == 'I' || ch[j] == 'O' || ch[j] == 'U') {
                      char temp = ch[j];
                      ch[j] = ch[i];
                      ch[i] = temp;
                      break;
             }
             } 
             } 
             }
                System.out.println(ch);
}
}
  

Комментарии:

1. дайте некоторый ожидаемый результат для некоторого ввода. ваше утверждение неясно

2. Я бы рекомендовал вам поместить все эти if операторы в вызываемую функцию bool isVowel(char c) и вызвать ее как if (isVowel(char[i])) .

Ответ №1:

Я считаю, что вы должны сохранить последний символ в обратном порядке, иначе вы будете продолжать заменять тот же символ в конце строки:

 public static void main(String[] args) {
     Scanner sc = new Scanner(System.in);

          String S = sc.nextLine();
          int n = S.length();
          char ch[] = S.toCharArray();
          int lastReversedChar = n - 1;
          for(int i = 0; i<n; i  ) {

              if(ch[i] == 'a' || ch[i] == 'e' || ch[i] == 'i' || ch[i] == 'o' || ch[i] == 'u'
              || ch[i] == 'A' || ch[i] == 'E' || ch[i] == 'I' || ch[i] == 'O' || ch[i] == 'U'){
                  for(int j = lastReversedChar; j>i; j--) {
              if(ch[j] == 'a' || ch[j] == 'e' || ch[j] == 'i' || ch[j] == 'o' || ch[j] == 'u'
              || ch[j] == 'A' || ch[j] == 'E' || ch[j] == 'I' || ch[j] == 'O' || ch[j] == 'U') {
                  char temp = ch[j];
                  ch[j] = ch[i];
                  ch[i] = temp;
                  lastReversedChar = j - 1;
                  break;
         }
         } 
         } 
         }
            System.out.println(ch);
  

Комментарии:

1. Не совсем. Установите lastReversedChar значение j - 1 . ideone.com/FQ5Ffe

2. большое вам спасибо за ответ Calculuwhiz и за то, что все работают 😉